2013-05-01 2 views
0

내 GridView의 itemtemplate에있는 드롭 다운 목록을 바인딩하려고했습니다. 하지만 "인덱스 1이 음수이거나 위의 행 수입니다."라는 위의 오류가 발생했습니다.GridView의 DropDownList 바인딩 오류 인덱스 1이 음수이거나 위의 행 개수입니다.

내 GridView에 ~ 100 개의 행이 있으며 각 드롭 다운 목록을 특정 데이터로 바인딩하고 싶습니다. 오류가 onRowDataBoundEvent에서 발생하고 디버그 도구에 의한 예외가 GridBinding 메서드에서 출력되어 GridView를 주 데이터와 바인딩합니다.

_grdqans.DataSource = _adl.LoadQans(long.Parse(_hdntstId.Value)); 
       _grdqans.DataBind(); 

의 GridView 드롭 다운 목록이다 : 여기서

if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      try 
      { 
       DropDownList _ddtpcs = (DropDownList)e.Row.Cells[4].FindControl("_ddtsttpc"); 
       if (_ddtstsubs.SelectedIndex != 0 && _ddtstsubs.SelectedIndex != -1) 
       { 
        if (_ddtpcs != null) 
        { 
         _ddtpcs.DataSource = _adl.LoadTopics(long.Parse(_ddtstsubs.SelectedValue)); 
          _ddtpcs.DataTextField = "top_nm"; 
          _ddtpcs.DataValueField = "top_id"; 
          _ddtpcs.DataBind(); 
          _ddtpcs.Items.Insert(0, new ListItem("Select", "0")); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "message", POPUPBuilder.ShowPopUpMsg(ex.ToString()), true); 
      } 
     } 

가 gridbinding위한 코드이다 : 여기

코드이다

<ItemTemplate> 
     <asp:DropDownList ID="_ddtsttpc" runat="server"> 
    </asp:DropDownList> 
</ItemTemplate> 

LoadTopics 방법

internal object LoadTopics(long _subId) 
    { 
     try 
     { 
      cmd = new SqlCommand("sp_LoadTopics", con.getconnection()); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@subId", _subId); 
      da = new SqlDataAdapter(cmd); 
      dt.Clear(); 
      da.Fill(dt); 
      cmd.Parameters.Clear(); 
      cmd.Connection.Close(); 
      cmd.Dispose(); 
      //da.Dispose(); 
      return dt; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      con.closeconnection(); 
     } 
    } 

여기서 내가 뭘 잘못하고 있니?

+0

그냥 첫 번째 전달 후 오류가 발생하는 명확한 rowdataboundevent 및 100 줄 gridview 내게 하나의 datarow 예외를 보여줍니다. – Alok

+0

어떤 오류 코드가 그 오류를 던지고 있습니까? – jadarnel27

+0

글쎄, 나는 e.row.rowindex가 grd.rows.count (count-1이어야 함)와 같음을 알았지 만, 왜 이런 일이 일어나는지 이해하지 못한다. – Alok

답변

1

갱신 당신이 많은 클래스 수준 개체를 사용하는 코드에서 아래 코드

DataTable topicDt = new DataTable(); 
using(SqlConnection con = new SqlConnection(connectionString)) 
using(SqlCommand cmd = new SqlCommand("sp_LoadTopics",con)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@subId", _subId); 
    con.Open(); 
    using(SqlDataAdapter da = new SqlDataAdapter(cmd)) 
    { 
     da.Fill(topicDt); 
    } 
} 

return topicDt; 

LoadTopics 방법. 이러한 객체는 null이거나 연결 등을 닫을 수 있습니다. 데이터베이스로 작업 할 때 메소드 레벨 오브젝트를 특별히 갖는 것이 더 좋습니다. 상수와 같은 연결 문자열을 다시 사용할 수 있습니다.

+0

덕분에 지금은 매력처럼 작동합니다. :) 내 실수를 설명해 주시겠습니까? 답변으로 표시 할 수 있습니다. 덕분에 @Damith – Alok

+0

@ Alok가 설명을 추가했습니다. 한가지 더 .. 당신은 일회용 객체에'using' 블록을 사용할 수 있습니다. 따라서 코드로 연결을 닫을 필요가 없습니다. 그 블록이 그것을 처리합니다. – Damith

+0

감사합니다. 코드를 사용하여 솔루션을 다시 검사했습니다. 데이터 테이블 객체는 호출시 null입니다. 다시 한 번 감사드립니다. – Alok