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;
} }
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;
}
}
程序运行,设置断点之后,程序运行到label2.Text = ddl.SelectedValue这一步的时候报错,可能是程序没找到Dropdownlist1,出错信息是:未将对象引用设置到对象的实例。