您的位置:首页 > 运维架构

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

2014-04-05 09:22 555 查看

如何在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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐