举个例子,有一个DataGrid已经绑定到了一个数据源,用的TemplateColumn,然后其中有一列在点击EditButton后会是一个DropDownList,现在要将这个DropDownList绑定到一个数据源,怎么实现?

解决方案 »

  1.   

    1.*.aspx文件
      <ItemTemplate>
    <asp:Label id=Label2 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.状态") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate> <asp:DropDownList id="DropDownList1" runat="server" Width="78px" SelectedIndex='<%# GetStatusIndex(DataBinder.Eval(Container,"DataItem.状态").ToString())%>'>
    <asp:ListItem Value="未完成">未完成</asp:ListItem>
    <asp:ListItem Value="完成">完成</asp:ListItem>
    </asp:DropDownList>
    </EditItemTemplate>
    2. *.cs文件代码(一般只有这个事件中用到取值)
     private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
        
    DropDownList status=(DropDownList)e.Item.FindControl("DropDownList1");
    ...;  //在这里对status进行绑定 }绑定
    1.从DS中绑定
    this.dpdAreas.DataTextField  = "AreaName";
    this.dpdAreas.DataValueField = "AreaID";
    this.dpdAreas.DataSource = DS;
    this.dpdAreas.DataBind();你的DS中必须有AreaName和AreaID两个字段
    2.自定义数据绑定
    for(int i = 10;i <= 50; i += 10)
    {
    ListItem ls = new ListItem();
    ls.Text = i.ToString()+"人";
    ls.Value = i.ToString();
    this.ddlDisplayNum.Items.Add(ls);
    }
    this.ddlDisplayNum.Items.Add(new ListItem("全部",""));  
    this.ddlDisplayNum.SelectedValue = "20";
      

  2.   

    获取数值我知道,问题在于在DataGrid中的DropDownList控件是要通过FindControl来查找的,而绑定那个DropDownList似乎只有在点击了EditCommand之后触发,这个时候找到的只有是ItemTemplate里的Label控件,UpdateCommand事件的时候DropDownList已经显示了,没法绑定.
    this.*****只能获取当前页面上的控件,否则会报出没有将对象引用设置到对象实例的错误...
      

  3.   

    这是以前写的 代码 你参考一下
    页面代码<Columns></Columns>里面加<asp:TemplateColumn  HeaderText=TitleOfCourtesy>
    <ItemTemplate>
    <asp:Label ID=Label1 Runat=server Text='<%#DataBinder.Eval(Container,"DataItem.TitleOfCourtesy")%>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate><asp:DropDownList ID =drpTitle Runat=server DataSource='<%#BindTheTitle()%>' DataTextField="TitleOfCourtesy" DataValueField="TitleOfCourtesy"></asp:DropDownList></EditItemTemplate>
    </asp:TemplateColumn>
    后台代码
    public SqlDataAdapter BindTheTitle()
    { SqlConnection Conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["msdsn"]);
    string SQL1="select Address from Users  ";
    SqlCommand comm1=new SqlCommand(SQL1,Conn );
    Conn.opne();
     return comm1.ExecuteReader(CommandBehavior.Close.Connection)}
      

  4.   

    CheckBoxList mycblist;
    int count = DataList1.Items.Count;
    foreach( DataListItem item in DataList1.Items)
    {
    mycblist = (CheckBoxList)item.FindControl("CheckBoxList1");
    mycblist.DataSource = CreateDataSource() ;
    mycblist.DataTextField = "StringValue";
    mycblist.DataValueField = "IntegerValue";
    mycblist.DataBind();
    }
      

  5.   

    CheckBoxList mycblist;
    int count = DataList1.Items.Count;
    foreach( DataListItem item in DataList1.Items)
    {
    mycblist = (CheckBoxList)item.FindControl("CheckBoxList1");
    mycblist.DataSource = CreateDataSource() ;
    mycblist.DataTextField = "StringValue";
    mycblist.DataValueField = "IntegerValue";
    mycblist.DataBind();
    }
      

  6.   

    请参照下面的实例//如何在编辑时,绑定编辑行的下拉框对象此处绑定datagrid控件,注意要设定键值
    ....................
    this.datagrid1.DataKeyField = "xxid";
    this.datagrid1.DataBind();//然后,在edit编辑事件里面
    //求取键值
    string mykeyid = this.datagrid1.Items[e.Item.ItemIndex].ToString();
    //求取当前行的下拉框对象
    DropDownList myDown = (DropDownList)this.datagrid1.Items[e.Item.ItemIndex].FindControl("下拉框ID");
    //根据键值从数据库中求取你所要的绑定值,如果是固定选项的话,可以不用键值
    sql = "select xxid,xxname from table";
    //根据SQL语句求取数据集
    DataTable mytab = 根据SQL求取数据集;
    //绑定
    myDown.DataSource = mytab;
    myDown.DataValueField = "xxxid";
    myDown.DataTextField = "xxxname";
    myDown.DataBind();
    }
      

  7.   

    http://singlepine.cnblogs.com/articles/266538.html
      

  8.   

    yefeihaha() ,你的例子在修改函数返回类型为DataTable以后运行通过行.
    其他的例子基本上都是未将对象引用设置到对象实例的错误,在于EditCommand时候,还不能FindControl到EditTemplate里面的Control,还是ItemTemplate里面的,比如Label.