2011-07-10 17 views
0
<asp:GridView ID="GridView1" runat="server" 
     style="height: 121px; width: 175px" BackColor="White" 
     BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
     onrowediting="GridView1_RowEditing" AutoGenerateColumns="false"> 
     <Columns> 
     <asp:CommandField ButtonType="Button" SelectText="Edit" ShowEditButton="true" /> 
     <asp:TemplateField> 
     <ItemTemplate> 
     <asp:Label ID="lblId" runat="server" Text='<%# Eval("Id") %>'></asp:Label> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("Id") %>'></asp:TextBox> 
     </EditItemTemplate> 

     </asp:TemplateField> 

     <asp:TemplateField> 
     <ItemTemplate> 
     <asp:Label ID="lblCpuName" runat="server" Text='<%# Eval("cpuname") %>'></asp:Label> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("cpuname") %>'></asp:TextBox> 
     </EditItemTemplate> 
     </asp:TemplateField> 



     <asp:TemplateField> 
     <ItemTemplate> 
     <asp:Label ID="lblStatus" runat="server" Text='<%# Eval("status") %>'></asp:Label> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("status") %>'>></asp:TextBox> 
     </EditItemTemplate> 
     </asp:TemplateField> 

     </Columns> 

    </asp:GridView> 


protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
     { 
      SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.Text; 
      GridViewRow row = GridView1.Rows[e.NewEditIndex]; 
      TextBox txt = (TextBox)row.FindControl("TextBox2"); 
      SqlDataSource1.UpdateParameters["CpuName"].DefaultValue = txt.Text; 
      SqlDataSource1.UpdateParameters["cpuid"].DefaultValue = "3"; 
      SqlDataSource1.Update(); 
      BindGridView(); 

     } 

我得到的對象引用未設置爲文本框txt上的對象。我無法在我的gridview中獲得textbox2。行編輯事件處理程序問題

回答

0

你可以試試這個

GridViewRow row = GridView1.Rows[GridView1.NewEditIndex]; 
TextBox txt = row.Cells[1].Controls[1] as TextBox; 
If (txt!= null) 
{ 
    SqlDataSource1.UpdateParameters["CpuName"].DefaultValue = txt.Text; 
    SqlDataSource1.UpdateParameters["cpuid"].DefaultValue = "3"; 
    SqlDataSource1.Update(); 
    BindGridView(); 
} 
+0

無法將類型爲「System.Web.UI.WebControls.Label」的對象轉換爲鍵入「System.Web.UI.WebControls.TextBox」。 –

+0

你能告訴我這個cpuName字段出現在Gridview中哪一列嗎? – Saanch

+0

它出現在第二列 –

0

爲什麼你不直接將文本框的值?這是一個很大的問題?

... 
GridViewRow row = GridView1.Rows[e.NewEditIndex]; 
SqlDataSource1.UpdateParameters["CpuName"].DefaultValue = row.Columns["CpuName"].Value; 
... 

我不知道這工作,因爲我是一個C#-er,並在WinForm的基本工作原理不是網絡應用

0

首先,這裏是從MSDN的片段,RowEditing話題:

點擊一個 行的編輯按鈕時,RowEditing事件引發,但 GridView控件進入 編輯模式之前。這使您可以提供 事件處理方法,該事件處理方法執行 自定義例程(例如,取消 編輯操作),只要發生此 事件。

要解決此問題,請爲此處理RowUpdating事件。有這應該是有幫助的,你一個例子:

GridView.RowEditing event

而且,我相信你應該使用綁定詞來你的TextBox綁定到字段:

「>

有關更多詳細信息,請參閱Data-Binding Expressions Overview