读书人

关于Datagrid的EditItemTemplate解决思

发布时间: 2013-07-16 22:38:04 作者: rapoo

关于Datagrid的EditItemTemplate
tableC
TypeId TypeName




一个Datagrid,第一列的标题名称是ABC,第二列的标题名称是类型,在点击这个Datagrid的编辑按钮之后,出现Datagrid的具体一行的编辑形式,第一列的编辑形式是一个label,第二列的编辑形式是一个下拉框,我想实现的效果是,当点击好编辑按钮之后,对第二列下拉框进行选择之后,第一列的label能显示第二列下拉框所选择的选项名称(TypeName),请问这个代码应该如何写?

前台代码:



<asp:TemplateColumn HeaderText="ABC">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "TypeName").ToString()%>
</ItemTemplate>
<EditItemTemplate>
<asp:Label ID="Label2" runat="server" Text=""></asp:Label>


</EditItemTemplate>
</asp:TemplateColumn>





<asp:TemplateColumn HeaderText="类型">
<ItemTemplate>
<%# ShowType(DataBinder.Eval(Container.DataItem,"TypeId").ToString()) %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" ID="Dropdownlist1" ></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>















后台代码:


private void Datagrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{


if (e.Item.ItemType == ListItemType.EditItem)
{
DropDownList list1 = (DropDownList)e.Item.FindControl("Dropdownlist1");

string strCmd1 = "select * from [tableC]";
list1.DataSource = ExecuteDataTable(strCmd1);
list1.DataTextField = "TypeName";
list1.DataValueField = "TypeId";
list1.DataBind();

string curTemp1;
DataRowView rv;
ListItem item1;
rv = (DataRowView)e.Item.DataItem;

curTemp1 = ShowPageType(rv.Row["Field"].ToString());
item1 = list1.Items.FindByText(curTemp1);
if (item1 != null)
item1.Selected = true;









}

}






[解决办法]
编辑模板里面改成这样:
<asp:DropDownList runat="server" ID="Dropdownlist1" AutoPostBack="true" onselectedindexchanged="Dropdownlist1_SelectedIndexChanged"></asp:DropDownList>


增加后台处理方法(需要调试一下,看看怎么找到label2):
protected void Dropdownlist1_SelectedIndexChanged(object sender, EventArgs e) {
DropDownList ddl = (DropDownList)sender;
Label label2 = (Label)(ddl.Parent.Parent.Parent.Controls[0].FindControl("label2"));
if (label2 != null) {
label2.Text = ddl.SelectedValue;
}
}

读书人网 >asp.net

热点推荐