how to bind a dropdownlist in gridview?

后端 未结 5 1894
攒了一身酷
攒了一身酷 2020-12-03 03:52

I have a gridview in which every row contains a dropdownlist. I want to bind every dropdownlist dynamically. Can someone tell me how can i do it. Thanks in Advance

相关标签:
5条回答
  • 2020-12-03 04:29

    Here is your gridview

    <asp:GridView ID="grvExcelData" runat="server" onrowdatabound="GridView2_RowDataBound">
        <HeaderStyle BackColor="#df5015" Font-Bold="true" ForeColor="White" />
          <Columns>
              <asp:TemplateField>
                  <ItemTemplate>
                     <asp:DropDownList ID="DrdDatabase" Width="100px" runat="server">
                     </asp:DropDownList>
                  </ItemTemplate>
              </asp:TemplateField>
          </Columns>
      </asp:GridView>
    

    and your RowDataBound event for the gridview would be

        protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
        {
           string cities = "maxico,chennai,newdelhi,hongkong";
           string [] arr = cities.Split(',');
        // Instead of string array it could be your data retrieved from database.
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DropDownList ddl = (DropDownList)e.Row.FindControl("DrdDatabase");
                foreach (string colName in arr )
                    ddl.Items.Add(new ListItem(colName));
            }
        }
    
    0 讨论(0)
  • 2020-12-03 04:32
    protected void gvSalesAppData_RowDataBound(Object sender, GridViewRowEventArgs e)
    
        {
    
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
    
                DropDownList ddlCurrentPhase = (DropDownList)e.Row.FindControl("ddlCurrentPhase");
                DropDownList ddlProductFamily = (DropDownList)e.Row.FindControl("ddlProductFamily");
                DropDownList ddlProductGroup = (DropDownList)e.Row.FindControl("ddlProductGroup");
                DropDownList ddlETProgramManager = (DropDownList)e.Row.FindControl("ddlETProgramManager");
                DropDownList ddlPLMForTheProduct = (DropDownList)e.Row.FindControl("ddlPLMForTheProduct");
    
                TrackingToolObj.BindCurrentPhases(ddlCurrentPhase);
                TrackingToolObj.BindCurrentPhases(ddlProductFamily);
                TrackingToolObj.BindProductGroups(ddlProductGroup);
                TrackingToolObj.GetEmployeesBasedOnRoleTypeId(ddlETProgramManager, (int)OSAEnums.RoleTypes.ProgramManager, false);
                TrackingToolObj.GetEmployeesBasedOnRoleTypeId(ddlPLMForTheProduct, (int)OSAEnums.RoleTypes.PLM, false);
    
    
            }
    
        }
    
    0 讨论(0)
  • 2020-12-03 04:41

    Binding the GridView

    Below is the code to Bind the GridView control with data.

    C#

    protected void Page_Load(object sender, EventArgs e)
    {
       if (!IsPostBack) 
       {
         this.BindData();   
       }
    } 
    
    private void BindData()
    {
       string query = "SELECT top 10 * FROM Customers";    
       SqlCommand cmd = new SqlCommand(query);    
       gvCustomers.DataSource = GetData(cmd);    
       gvCustomers.DataBind(); 
    }
    
    private DataTable GetData(SqlCommand cmd)
    {    
        string strConnString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;    
        using (SqlConnection con = new SqlConnection(strConnString))   
        {        
           using (SqlDataAdapter sda = new SqlDataAdapter())     
           {            
              cmd.Connection = con;            
              sda.SelectCommand = cmd;            
              using (DataTable dt = new DataTable())  
              {                
                  sda.Fill(dt);                
                  return dt;
              }     
           }   
        }
    }
    
    0 讨论(0)
  • 2020-12-03 04:45

    In addition to the proposed methods, you may also bind your controls within your markup, in this way:

    <asp:GridView ID="MyGrid" runat="server" DataSourceID="MyDataSource1">
        <Columns>
            <asp:TemplateField>
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind ("CustomerId") %>' DataSourceID="CustomersDataSource" DataTextField="CustomerName" DataValueField="CustomerId" >
                    </asp:DropDownList>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    
    0 讨论(0)
  • 2020-12-03 04:46

    If you are using template column then you can bind your drop-down from mark-up using data-binding expressions. For example,

    <asp:TemplateField HeaderText="XYZ">
      <ItemTemplate>
        <asp:DropDownList runat="server" ID="MyDD" DataSourceId="MyDataSource" />
      </ItemTemplate> 
    </asp:TemplateField>
    

    Above is assuming that your drop-down data in constant across rows. If it is changing then you can use data-binding expression such as

    <asp:DropDownList runat="server" DataSource='<%# GetDropDownData(Container) %>' DataTextField="Text" DataValueField="Value"  />
    

    GetDropDownData will be a protected method in code-behind that will return the data (data-table, list, array) for the given row.

    You can use GridView.RowDataBound event (or RowCreated event) in code-behind to fill drop-downs. For example,

      protected void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
      {
    
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
          // Find the drop-down (say in 3rd column)
          var dd = e.Row.Cells[2].Controls[0] as DropDownList;
          if (null != dd) {
             // bind it
          }
    
          /*
          // In case of template fields, use FindControl
          dd = e.Row.Cells[2].FindControl("MyDD") as DropDownList;
          */
        }
    
      }
    
    0 讨论(0)
提交回复
热议问题