2013-06-01 2 views
0

asp.net (C#)로 작성된 gridview가 있습니다. 문제는 텍스트 반환 null에서 데이터를 읽으려고 할 때입니다.gridview에서 컨트롤 찾기 return null

 <asp:GridView ID="GridView1" runat="server" DataKeyNames="Week#/Day" 
      OnRowDataBound="GridView1_RowDataBound" 
      onrowediting="GridView1_RowEditing" 
       OnRowUpdating="GridView1_RowUpdating" AutoGenerateColumns="false" 
       OnPageIndexChanging="GridView1_PageIndexChanging" 
      OnRowCancelingEdit="GridView1_RowCancelingEdit" AllowPaging="true" 
     PageSize="4" > 
      <Columns> 
      <asp:ButtonField ButtonType="Link" CommandName="Update" text="Update" /> 
      <asp:ButtonField ButtonType="Link" CommandName="Edit" text="Edit"/ 
     <asp:TemplateField HeaderText="Week#/Day" InsertVisible="False" 
     SortExpression="Week#/Day"> 
        <EditItemTemplate> 
         <asp:Label ID="Label5" runat="server" Text='<%# 
     Eval("Week#/Day") %>'></asp:Label> 
        </EditItemTemplate> 
       </asp:TemplateField> 
     <asp:TemplateField HeaderText="Saturday" SortExpression="Saturday"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox1" runat="server" 
      Text='<%# Bind("Saturday") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label7" runat="server" 
      Text='<%# Bind("Saturday") %>'></asp:Label> 
        </ItemTemplate> 
        </asp:TemplateField> 
      <asp:TemplateField HeaderText="Sunday" SortExpression="Sunday"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox2" runat="server" 
       Text='<%# Bind("Sunday") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label8" runat="server" 
       Text='<%# Bind("Sunday") %>'></asp:Label> 
        </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="Monday" SortExpression="Monday"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox3" runat="server" 
       Text='<%# Bind("Monday") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label9" runat="server" 
       Text='<%# Bind("Monday") %>'></asp:Label> 
        </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="Tuesday" SortExpression="Tuesday"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox4" runat="server" 
       Text='<%# Bind("Tuesday") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label10" runat="server" 
       Text='<%# Bind("Tuesday") %>'></asp:Label> 
        </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="Wednesday" 
       SortExpression="Wednesday"> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox5" runat="server" 
     Text='<%# Bind("Wednesday") %>'></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label11" runat="server" 
     Text='<%# Bind("Wednesday") %>'></asp:Label> 
        </ItemTemplate> 
        </asp:TemplateField> 

      </Columns> 
    </asp:GridView> 

나는 편집 통화

 protected void GridView1_RowEditing(object sender,GridViewEditEventArgs e) 
    { 
     GridView1.EditIndex = e.NewEditIndex; 

     BindData(); 
    } 

및 업데이트 호출 업데이트 방법에

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
      //Retrieve the table from the session object. 
      DataTable dt = (DataTable)Session["All_Topics"]; 

      GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; 
      TextBox d1, d2, d3, d4, d5; 
      d1 = (TextBox)row.FindControl("TextBox1"); 
      d2 = (TextBox)row.FindControl("TextBox2"); 
      d3 = (TextBox)row.FindControl("TextBox3"); 
      d4 = (TextBox)row.FindControl("TextBox4"); 
      d5 = (TextBox)row.FindControl("TextBox5");  

      dt.Rows[row.DataItemIndex]["Saturday"] = d1.Text; 
      dt.Rows[row.DataItemIndex]["Sunday"] = d2.Text; 
      dt.Rows[row.DataItemIndex]["Monday"] = d3.Text; 
      dt.Rows[row.DataItemIndex]["Tuesday"] = d4.Text; 
      dt.Rows[row.DataItemIndex]["Wednesday"] = d5.Text; 

     } 

문제는 그것이 항상 텍스트 상자에서 데이터를 읽을 때이 방법을 DataTable을 사용하여 그것을 채우기입니다 없는. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

안녕하세요 제발 그 페이지의 포스트 백에 GridView를 다시 바인딩하지 않았는지 확인하십시오. 이것은 문제의 원인 일 수 있습니다.

페이지로드시 그리드를 아래 코드와 항상 바인딩하십시오. 당신이 Row Update Command를 클릭 할 때 당신이 당신의 그리드 바인딩 및 텍스트 상자에서 null을 얻을 것입니다 주어진 방식처럼 그리드를 바인딩하지 않는 경우

if (!Page.IsPostBack){ 
// Code to bind the Grid 
// BindData(); 
} 

이 먼저 페이지로드 이벤트 페이지로드에 이동됩니다.

희망은 도움이 될 것입니다.