簡體   English   中英

如何使用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>        

這是后端代碼:

公共局部類JunctionAllotment:System.Web.UI.Page {受保護的無效Page_Load(對象發送者,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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM