简体   繁体   中英

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

Here is my aspx page : i want to bind a column to Dropdownlist but i cant find Repeater("Repeater1") in back-end code. Please Help !

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

Here is the Back end code:

public partial class JunctionAllotment : 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());
        }
    }
}

In backend code it says "Repeater1" does not exists in current context.

This piece of code is highly suspect. This code says the GridView needs one or more DropDownLists for each row

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

I think this is more inline with what you're trying to do:

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

Then in the code behind(Sorry for the VB - but C# should be simple enough to convert)

    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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM