c# - 如何在 c# 中绑定(bind) gridview rowdatabound 中的下拉列表?

标签 c# gridview data-binding

这是我在 GridView 中的 Edit Item Template 中的 Drop Down List 在 c# 中

<asp:DropDownList runat="server" ID="ddlFl" AutoPostBack="true"
 OnSelectedIndexChanged="ddlFl_SelectedIndexChanged"
      DataValueField='<%# Eval("ID").ToString() %>'>
   <asp:ListItem Text="[ Select ]" Value=""></asp:ListItem>
   <asp:ListItem Text="-------------" Value=""></asp:ListItem>
   <asp:ListItem Text="0" Value="0"></asp:ListItem>
   <asp:ListItem Text="1" Value="1"></asp:ListItem>
   <asp:ListItem Text="2" Value="2"></asp:ListItem>
</asp:DropDownList>

当用户点击编辑时,网格进入编辑模式。

如果是产品子类别,我们将 tbl_2 表中可用的所有产品类别的列表加载到下拉列表中,可供用户选择,如果该行存在值,则为在下拉列表中选择。

我尝试过这种模式但没有成功,因为我有错误:

Data binding methods such as Eval (), XPath (), and Bind () can only be used in the context of a data-bound control.

如何解决这个问题?

你能帮帮我吗?

在此先感谢您的帮助,非常感谢。

protected void ddlFl_SelectedIndexChanged(object sender, EventArgs e)
{

    DropDownList btn = (DropDownList)sender;
    string indexID = btn.DataValueField;
    string LinkID = btn.SelectedValue;
    GridViewRow row = (GridViewRow)btn.NamingContainer;

    Response.Write(LinkID);

}


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        if (e.Row.DataItem != null)
        {
            if ((e.Row.RowState & DataControlRowState.Edit) > 0)
            {
                DropDownList ddlFl = (DropDownList)e.Row.FindControl("ddlFl");
                ddlFl.DataTextField = "Dip";
                ddlFl.DataValueField = "Dip";
                ddlFl.DataSource = RetrieveSubCategories();
                ddlFl.DataBind();
                DataRowView dr = e.Row.DataItem as DataRowView;
                ddlFl.SelectedValue = dr["Dip"].ToString();
            }
        }
    }
}


private DataTable RetrieveSubCategories()
{
    DataTable dtSubCategories = new DataTable();

    sql = @String.Format(" SELECT Dip FROM `tbl_2` GROUP BY Dip; ");

    using (OdbcConnection myConnectionString =
      new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnMySQL"].ConnectionString))
    {
        using (OdbcCommand cmd = 
            new OdbcCommand(sql, myConnectionString))
        {
            {
                OdbcDataAdapter adapter = 
                    new OdbcDataAdapter(cmd);
                adapter.Fill(dtSubCategories);
            }
        }
    }
    return dtSubCategories;
}

最佳答案

DataSource必须在第一个位置,然后是数据文本和值字段:

DropDownList ddlFl = (DropDownList)e.Row.FindControl("ddlFl");
ddlFl.DataSource = RetrieveSubCategories();
ddlFl.DataTextField = "Dip";
ddlFl.DataValueField = "Dip";
ddlFl.DataBind();

关于c# - 如何在 c# 中绑定(bind) gridview rowdatabound 中的下拉列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49108086/

相关文章:

android - 如何使用 GridView 构建此布局?

asp.net - 从 asp.net gridview 模板列内的复选框获取数据

c# - 通过 .NET 中的某种接口(interface)使属性可用于数据绑定(bind)?

c# - Azure AD 的 Active Directory 身份验证异常 (AADSTS90027)

c# - 在 asp.net 中传递和获取太大的查询字符串

c# - 为什么我的复选框没有注册为已选中?

wpf - 是否可以使用 ViewModel 第一种方法从 View 订阅 ViewModel 事件?

c# - 我将如何使用 c#/asp.net 去 abouce decodeURI

c# - 在 MVC 2 中保存/获取 cookie 时出现问题

php - 使用 Yii2 在 Gridview 中显示相关数据