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;               
               
                           }        }

解决方案 »

  1.   

    编辑模板里面改成这样:
    <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;
    }
    }
      

  2.   


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