2015-11-05 5 views
0

Если я хочу заполнить DropdownList в GridView, что будет лучшим способом? использовать GridView'OnRowDataBound 'событие и выборка запроса каждый раз в db или сначала получить все данные и наложить его на datatable и продолжить работу с этим datatable?метод заселения выпадающего списка внутри gridview

+1

что вы думаете ?, где вы застряли. ? – BNN

ответ

0

Как ваш вопрос неясно о ваших требованиях, я предполагаю, что вы хотите связать dropdownlist внутри Gridview с использованием OnRowDataBound события gridview.

Так вот шаги: -

  1. Добавить Gridview HTML на странице ASPX с DropDownList в ItemTemplate из TemplateField.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound"> 
 
    <Columns> 
 
     <asp:BoundField HeaderText="Name" DataField="ContactName" /> 
 
     <asp:TemplateField HeaderText = "Country"> 
 
      <ItemTemplate> 
 
       <asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>' Visible = "false" /> 
 
       <asp:DropDownList ID="ddlCountries" runat="server"> 
 
       </asp:DropDownList> 
 
      </ItemTemplate> 
 
     </asp:TemplateField> 
 
    </Columns> 
 
</asp:GridView>

Затем вам нужно связать gridview с записями, которые поступают из базы данных.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     GridView1.DataSource = GetData("SELECT ContactName, Country FROM Customers"); 
     GridView1.DataBind(); 
    } 
} 
private DataSet GetData(string query) 
{ 
    string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
    SqlCommand cmd = new SqlCommand(query); 
    using (SqlConnection con = new SqlConnection(conString)) 
    { 
     using (SqlDataAdapter sda = new SqlDataAdapter()) 
     { 
      cmd.Connection = con; 
      sda.SelectCommand = cmd; 
      using (DataSet ds = new DataSet()) 
      { 
       sda.Fill(ds); 
       return ds; 
      } 
     } 
    } 
} 

Тогда код OnRowDataBound будет следовать, как показано ниже: -

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //Find the DropDownList in the Row 
     DropDownList ddlCountries = (e.Row.FindControl("ddlCountries") as DropDownList); 
     ddlCountries.DataSource = GetData("SELECT DISTINCT Country FROM Customers"); 
     ddlCountries.DataTextField = "Country"; 
     ddlCountries.DataValueField = "Country"; 
     ddlCountries.DataBind(); 

     //Add Default Item in the DropDownList 
     ddlCountries.Items.Insert(0, new ListItem("Please select")); 

     //Select the Country of Customer in DropDownList 
     string country = (e.Row.FindControl("lblCountry") as Label).Text; 
     ddlCountries.Items.FindByValue(country).Selected = true; 
    } 
} 

Смотрите Reference link для справки

см также Working demo для справки

Надежда, что помогает.

Смежные вопросы