如何使用 C# 将数据源分配给 gridview ASP.net 中中继器内的下拉列表

how to assign a datasource to a dropdownlist inside a repeater in a gridview ASP.net with C#

这是我的 aspx 页面:我想将一列绑定到 Dropdownlist,但我在后端代码中找不到 Repeater("Repeater1")。请帮忙 !

   <asp:GridView ID="gridViewAllotment" CssClass="table table-striped" runat="server" 
                        AutoGenerateColumns="false" GridLines="None" BorderColor="#999999" 
                        BorderStyle="Groove">
                        <Columns>
                        <asp:TemplateField HeaderText="Traffic Police">
                            <ItemTemplate>
                                <%# Eval("U_Name") %>
                            </ItemTemplate>
                        </asp:TemplateField>

                        <asp:TemplateField HeaderText="Traffic Junction">
                         <ItemTemplate>

                       <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound = "Test">
                            <ItemTemplate>
                            <asp:DropDownList ID="ddl_TrafficJunction" runat="server" DataTextField="Junction">            
                            </asp:DropDownList>
                          </itemTemplate>
                        </asp:Repeater>                          
                        </itemTemplate>                            
                        </asp:TemplateField>
                  </Columns>
                </asp:GridView>        

这是后端代码:

public 部分 class 交界处分配:System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { gridViewAllotment.DataSource = AllotmentLogic.SelectAllTrafficPolices();
gridViewAllotment.DataBind();

    Repeater1.DataSource = RepSource();
    Repeater1.DataBind();
}

public List<string> RepSource()
{
    DataTable data = (DataTable)AllotmentLogic.SelectAllTrafficPolices();
    var j = data.Rows.Count;
    List<string> rep = new List<string>();
    for (int i = 0; i < j ; i++)
    {
        rep.Add(i.ToString());
    }
    return rep;
}

public void FillDropdown(DropDownList ddl)
{
    DataTable dt = AllotmentLogic.SelectTrafficJunction();

    foreach (DataRow row in dt.Rows)
    {
        if (row["TrafficJunction_Name"].ToString() != null)
        {
            ddl.Items.Add(row["TrafficJunction_Name"].ToString());
        }
    }
}

在后端代码中它说 "Repeater1" 在当前上下文中不存在。

这段代码非常可疑。此代码表示 GridView 需要一个或多个 DropDownLists 每一行

    <asp:TemplateField HeaderText="Traffic Junction">
      <ItemTemplate>
        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound = "Test">
          <ItemTemplate>
            <asp:DropDownList ID="ddl_TrafficJunction" runat="server"
                              DataTextField="Junction">            
            </asp:DropDownList>
          </ItemTemplate>
        </asp:Repeater>                          
      </ItemTemplate>                            
    </asp:TemplateField>

我认为这更符合您要执行的操作:

    <asp:TemplateField HeaderText="Traffic Junction">
      <ItemTemplate>
          <asp:DropDownList ID="ddl_TrafficJunction" runat="server"
                            DataTextField="Junction">            
          </asp:DropDownList>
      </ItemTemplate>                            
    </asp:TemplateField>

然后在后面的代码中(对不起 VB - 但 C# 应该足够简单,可以转换)

    Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
      If e.Row.RowType = DataControlRowType.DataRow Then
        Dim ddl As DropDownList = e.Row.FindControl("ddl_TrafficJunction")

        ddl.DataSource = CType(AllotmentLogic.SelectTrafficJunction(), DataTable)
        ddl.DataBind()
      End If
    End Sub