如何在datagrid的模版编辑列里动态绑定了一个dropdownlist

如何在datagrid的模版编辑列里动态绑定了一个dropdownlist

现在我就把实现在datagrid的模版编辑列里动态绑定了一个dropdownlist的方法总结如下,希望能对一些后来学习的人有帮助^_^ ///首先在aspx文件里定义datagrid和dropdownlist<asp:datagrid id=dg_js runat="server" CellPadding="2" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="stu_id" ReadOnly="True" HeaderText="学号"></asp:BoundColumn>
<asp:BoundColumn DataField="stu_name" ReadOnly="True" HeaderText="姓名"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="角色">
    <HeaderTemplate>角色</HeaderTemplate>
    <ItemTemplate>
        <asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.role_name") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList id="ddl_js" runat="server" DataTextField="role_name" DataValueField="role_id"></asp:DropDownList>
    </EditItemTemplate></asp:TemplateColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="保存" HeaderText="编辑" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
</Columns>
</asp:datagrid> ///如果你觉得自己手敲其中的模版列那段代码比较难,你也可以在设计视图中定义,具体操作是:建立一个datagrid,选中它右击,选择属性生成器 ——>选定列——>添上你要绑定的数据字段,勾选去掉“只读”,然后点击“将次列转换为模版列”。仍选中datagrid右击,编辑模版—— >选择你刚刚定义的那一列,在ItemTeplate里面拖入一个Label,在EditItemTemplat里面拖入一个 dropdownlist,这样都生成了上面相应的html代码。 ///在aspx.cs文件里绑定datagrid     public DataSet get_roleInfo()
          {
            try
           {
            DataSet ds=new DataSet();   
            string searchString="select stu_id,stu_name,role_id,role_name from t_role";
            da=new OleDbDataAdapter(searchString,conn);
            da.Fill(ds,"roleTable");    
             return ds;
           }
           catch
           {
            return null;    
           }  
          }         //绑定DataGrid   
        private void BindGrid()
          {
           DataSet ds = new DataSet();
           ds =this.get_roleInfo();
           if (ds!=null)
           {
            this.dg_js.DataSource = ds;
            this.dg_js.DataBind();
           }
           else
           {
            msg.Alert("加载数据错误!",Page);
           }
          } ///绑定datagrid的ItemDataBind()事件,让其正常显示下为Label,在编辑状态下为DropDownList。在这里写的代码就是要实现当我们选择编辑时根据Label的值自动从数据库中取出编号为role_id值的role_name,并用DropDownList默认选中。string current; //定义一个全局变量 private void dg_js_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
  if(e.Item.ItemType==ListItemType.EditItem)
  {
       DropDownList ddl_js = (DropDownList)e.Item.FindControl("ddl_js");
       ///以下是绑定将ddl_js与数据库绑定
       SqlConnection olecon=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"].ToString());
       string select="select [t_role].[role_id],role_name from t_role";
       SqlDataAdapter da=new SqlDataAdapter(select,olecon);
       DataSet ds=new DataSet();
       da.Fill(ds,"roleTable"); 
       ddl_js.DataSource = ds.Tables["roleTable"].DefaultView; 
       ddl_js.DataTextField="role_name";
       ddl_js.DataValueField="role_id";   
       ddl_js.DataBind();
       olecon.Close();
       ddl_js.SelectedIndex = ddl_js.Items.IndexOf(ddl_js.Items.FindByText(current));         }}///ddl_js.SelectedIndex = ddl_js.Items.IndexOf(ddl_js.Items.FindByText(current)); 这种方法我在别人写的技术文章里看到过好几次,但我觉得并不好用,经常会出错,因为ddl_js.SelectedValue值有可能有空格,需要用 ddl_js.SelectedValue.Trim()方法将空格去掉。所以我推荐用for循环的方法,具体的代码如下for(int i=0;i<ddl_js.Items.Count;i++)
       {
        if(ddl_js.Items[i].Text.Trim()==(current))
        {
         ddl_js.SelectedIndex=i;
        }
       }
 ///最后一步,只要在datagrid的EditCommand()方法里面添上相应代码即可^^private void dg_js_EditCommand_1(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {   Label lbl_js=(System.Web.UI.WebControls.Label)e.Item.FindControl("Label1");    
   current = lbl_js.Text.Trim();   //在把datagrid变成编辑模式之前获取到模版列itemplate中的label的值,并将它赋给全局变量current
   dg_js.EditItemIndex=e.Item.ItemIndex;
   BindGrid();
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值