我们如何处理gridview / datalist中下拉列表的onselectedindexchanged事件?

时间:2012-02-23 07:48:55

标签: c# asp.net drop-down-menu datalist selectedindexchanged

我有一个简单的数据列表,带有下拉列表和文本框。

当下拉列表选择索引更改时,我想将值加载到该列表框项目的文本框中(即该特定行上的文本框)。

<ItemTemplate>
  <asp:DropDownList runat="server" 
    ID="ddlCategory" AutoPostBack="true"
    DataTextField="category"
    DataValueField="category_code" 
    OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" />                      
    <br />
    Code<asp:TextBox 
      runat="server" 
      ID="txtOutputCode" 
      Text='<%# Bind("output_code") %>' />
</ItemTemplate>

我该怎么做?

我面临的挑战是如何找到要更新的相应文本框。

E.g。对于一个按钮,我会传递一个命令名和命令参数。然后我将在gridview或datalist中处理事件以找到相应的文本框并更新文本。如果下拉列表的selectedindex更改,我们可以做些什么?

谢谢!

3 个答案:

答案 0 :(得分:3)

我想这应该有效。试试这个......

protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e)
{
   var ddlList= (DropDownList)sender;
   var row = (GridViewRow)ddlList.NamingContainer;
   //get the Id of the row
   var Id = Convert.ToInt32(((Label)row.FindControl("IdColumn")).Text);
}

答案 1 :(得分:1)

您应该做的是以下内容:

private SomeObject o = new SomeObject();

private void o_SomeEvent(...) {
}

public TheConstructor() {
    this.o.SomeEvent += new SomeHandler(o_SomeEvent);
}

这意味着您必须创建一个新的下拉列表并将其事件附加到itemdatabound上的gridview中的下拉列表中

答案 2 :(得分:0)

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownList ddlcouse = (DropDownList)sender;
        DataListItem Grow = (DataListItem)ddlcouse.NamingContainer;
        foreach (DataListItem dst in dstAllSite.Items)
        {
            DropDownList ddl_AccountInfo = (DropDownList)dst.FindControl("ddlAccountInfo");
            if (ddlcouse.SelectedIndex > 0)
            {
                BindAccountDDL(ddl_AccountInfo, ddlcouse.SelectedValue.Trim());
                ddlcouse.Focus();
            }
        }
    }

    private void BindAccountDDL(DropDownList ddlAccountInfo, string ddlcouse)
    {
        csPL.ddlcouse = ddlcouse;
        DataTable dt = csBL.BindAccountInfoDDL(csPL);
        if (dt.Rows.Count > 0)
        {
            ddlAccountInfo.DataSource = dt;
            ddlAccountInfo.DataTextField = "BankName";
            ddlAccountInfo.DataValueField = "BankId";
            ddlAccountInfo.DataBind();
            ddlAccountInfo.Items.Insert(0, "Select");
        }
    }