2013-12-23 2 views
-1

gridview 내부에 드롭 다운이 있으므로 gridview가로드되고 드롭 다운이 바인딩되면 드롭 다운에 드롭 다운 목록의 첫 번째 값만 표시됩니다. 이전에 선택한 값이 표시되지 않습니다. gridview로드 할 때 해당 행에 대해 이전에 선택된 것을 표시하려면 드롭 다운을 원합니다. 드롭 다운에 대한 영문 마크 업 : 여기 내 코드는 "I 바인딩 후이 코드 줄을 추가하기 위해 노력했다DropDown 선택한 값 표시 안 함

protected void RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DropDownList ddl_Answer; 
     //get current index selected 
     int current_quest = 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 where ID= '" + current_quest + "' ", con2)) 
      { 
       ddl_Answer.DataSource = cmd1.ExecuteReader(); 
       ddl_Answer.DataTextField = "DD_ANSWER"; 
       ddl_Answer.DataValueField = "DD_ANSWER"; 
       ddl_Answer.DataBind();       
      } 
       con2.Close(); 
     } 

    } 

하지만 난이 오류 :

여기
<asp:TemplateField HeaderText="Answer"> 
    <ItemTemplate> 
     <asp:Label ID="lblAns" runat="server" Text='<%# Eval("DDL_ANS")%>' Visible="false"></asp:Label> 
     <asp:DropDownList ID="ddl_Answer" runat="server"> 
     </asp:DropDownList> 
    </ItemTemplate> 

코드 뒤에입니다 개체 참조가

ddl_Answer.Items.FindByValue((e.Row.FindControl("lblAns") as Label).Text).Selected = true; 

감사

+1

if 문 끝 부분에 누락 된 괄호가 있습니다. –

+0

마지막 줄을 여러 줄로 구분하고 각 줄을 디버거로 단계별 실행하십시오. –

+0

고마워요.하지만 문제가 있습니다. 코드를 붙여 넣을 때 대괄호를 추가하는 것을 잊어 버렸습니다. – moe

답변

1

SELECT 당신은 당신의 컨트롤을 액세스하기 전에 널 (null)을 확인하려고 대신 current_quest

끄트머리의 current_quest_sk를 사용할 필요가 (ID)는 테이블에있는 정수입니다.

SQL 삽입은 피해야하지만 다른 주제입니다.

+1

+1 -이 답변을 입력하고있었습니다. 또한 ID는 정수형이므로 OP는 select 문에서'''를 제거해야합니다. – afzalulh

0

프라 객체 "의 인스턴스로 설정되지 않았습니다 코드의 중단 점을 지정하고 디버거를 사용하여 설정하십시오.

문자열 이름 중 하나에 오타가 있거나 잘못된 컨트롤을보고 있습니다.

코드를 단계별 실행하면 코드의 어떤 행이 문제를 일으키는 지 정확히 알 수 있습니다.

문제를 격리하는 데 도움이되도록 전체적으로 try/catch 블록을 배치 할 수도 있습니다. 문제를 찾으면 try/catch 블록을 제거하십시오.

var ddl_Answer = e.Row.FindControl("ddl_Answer") as DropDownList; 
var answerLabel = e.Row.FindControl("lblAns") as Label; 
if(answerLabel !=null && ddl_Answer!=null) 
{ 
    ddl_Answer.Items.FindByValue(answerLabel.Text).Selected = true; 
} 


@afzalulh 유효한 점 current_quest_sk을 경우 따옴표를 제거있다 : 나는 믿고

+0

시도했지만 코드 줄에서 여전히 실패했습니다. – moe