2013-12-22 25 views
0

我有一個在gridview中的下拉菜單,它是綁定的,但問題是綁定只有第一行,並保持GridView的其餘部分綁定相同的值。我期待gridview中每一行的下拉列表,下拉列表的內容將根據gridvew中的ID而不同。一行可能是「是」,另一行可能是「是」,「否」,不適用。這裏是我的代碼:如何在GridView中綁定DropDown

protected void RowDataBound(object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 

      DropDownList ddl_Answer; 
      foreach (GridViewRow grdRow in GridView1.Rows) 
      { 

       //get current index selected 
       int current_eng_sk = Convert.ToInt32(GridView1.DataKeys[e.Row.RowIndex].Value); 
       ddl_Answer = (DropDownList)(GridView1.Rows[grdRow.RowIndex].Cells[2].FindControl("ddl_Answer")); 
       String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString; 
       SqlConnection con2 = new SqlConnection(strConnString); 
       SqlDataAdapter sda = new SqlDataAdapter(); 
       SqlCommand cmd1 = new SqlCommand("select distinct DD_ANSWER from table1 D, table2 Q where Q.ANS_OPT = D.ID and ENG_SK= '" + current_eng_sk + "' and Q.ANS_OPT is not null "); 

       cmd1.Connection = con2; 
       con2.Open(); 
       ddl_Answer.DataSource = cmd1.ExecuteReader(); 
       ddl_Answer.DataTextField = "DD_ANSWER"; 
       ddl_Answer.DataValueField = "DD_ANSWER"; 
       ddl_Answer.DataBind(); 
       con2.Close(); 

      } 
} 

回答

2

您已經在GridView的RowDataBound事件中。這是每行觸發一次,所以你不需要每次進一步foreach (GridViewRow grdRow in GridView1.Rows)。您應該能夠將您的代碼簡化爲:

protected void RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DropDownList ddl_Answer; 
     //get current index selected 
     int current_eng_sk = Convert.ToInt32(GridView1.DataKeys[e.Row.RowIndex].Value); 
     ddl_Answer = e.Row.FindControl("ddl_Answer") as DropDownList; 
     using (SqlConnection con2 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString)) 
     { 
      con2.Open(); 
      using (SqlCommand cmd1 = new SqlCommand("select distinct DD_ANSWER from table1 D, table2 Q where Q.ANS_OPT = D.ID and ENG_SK= '" + current_eng_sk + "' and Q.ANS_OPT is not null ", con2)) 
      { 
       ddl_Answer.DataSource = cmd1.ExecuteReader(); 
       ddl_Answer.DataTextField = "DD_ANSWER"; 
       ddl_Answer.DataValueField = "DD_ANSWER"; 
       ddl_Answer.DataBind(); 
      } 
     } 
    } 
}