我在dataGrid中加入摸板列DropDownList,是加在<ItemTemplate></ItemTemplate>之间的.我在使用时选择其中的下拉的值是可以的,但保存时,从detaGrid中读出它的当前值总是得不到想要的当前值,不知道为什么,用TextBox却有可以.
代码如下;
drp1=(DropDownList)DataGrid1.Items[i].Cells[5].Controls[1];//获得DropDownList当前的值

解决方案 »

  1.   

    确保你对Datagrid和dropdownlist的数据绑定写在了
    if (!IsPostBack)
    {
        //里面
    }
      

  2.   

    数据绑定用的是DataGrid1_ItemDataBound,这种方法我在dataGrid的editTemplate模式下是没有问题的
      

  3.   

    你在选中某个下拉项之后要修改数据库然后重新绑定DataGrid才行,这样读出的才是正确的
      

  4.   

    模板列代码<asp:TemplateColumn headertext="drop">
    <ItemTemplate>
    <asp:DropDownList id="dd" runat="server">
    <asp:ListItem selected="True" value="1">ddddd</asp:ListItem>
    <asp:ListItem value="2">sdsdf</asp:ListItem>
    </asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateColumn>
    codebehind代码:
    DropDownList dd = (DropDownList)DataGrid1.FindControl("dd");
    Response.Write(dd.SelectedItem.Value);
      

  5.   

    模板列中添加DropDownList是不好保存值,因为没有添加事件过程进去,所以你改变值时不会被保存的,建议在Item_DataBound中直接创建一DropDownList控件,然后再添加到项里即可
    ----------------------------------
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if (DataGrid1.EditItemIndex!=-1)
    {
    if (e.Item.ItemIndex==DataGrid1.EditItemIndex)
    {
    DropDownList ddl=new DropDownList();
    ddl.Items.Add("等待确认");
    ddl.Items.Add("已经发货");
    ddl.Items.Add("交易完毕");
    ddl.Items.Add("问题订单");
    ddl.Width=90;
    ddl.SelectedValue=((TextBox)(e.Item.Cells[3].Controls[0])).Text;
    e.Item.Cells[3].Controls.Add(ddl);
    }
    }
    }
      

  6.   

    楼上两位应该是可行的,
    将绑定代码放在!isPageBack中
    你读取DataGrid的值应该是在UpdateCommand这个事件中读取值
      

  7.   

    html中写
    <asp:TemplateColumn SortExpression="数据库类型" HeaderText="数据库类型">
    <ItemTemplate>
    <asp:Label id=Label2 Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"数据库类型")%>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate><asp:DropDownList id=edit_State Runat="server" SelectedIndex='<%# GetStateIndex(DataBinder.Eval(Container.DataItem,"11").ToString()) %>'><asp:ListItem Value="sqlserver">sqlserver</asp:ListItem>
    <asp:ListItem Value="oracle">oracle</asp:ListItem> </asp:DropDownList>
      </EditItemTemplate>
    </asp:TemplateColumn>
    在.aspx中
    public int GetStateIndex(String stateName)
    {
    if (StateIndex[stateName] != null)
    return (int)StateIndex[stateName];
    else
    return 0;
    }((DropDownList)e.Item.FindControl("edit_State")).SelectedItem.ToString();//保存数据内容
      

  8.   

    忘了还得加
    StateIndex = new Hashtable();
    StateIndex["sqlserver"] = 0;
    StateIndex["oracle"] = 1;
      

  9.   

    可能是你重新邦定了吧
    看看的page_load中有没有漏洞