2011-07-10 20 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

2列目に表示されます –

0

を試すことはできますか?これは大きな問題ですか?

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

私はC#の-erだから、これが機能することを知っており、基本的にはないWebアプリケーション

0

まず上のWinフォーム上では動作しません、ここで話題をRowEditing MSDNからの抜粋は、次のとおりです。

行の[編集]ボタンがクリックされたときにRowEditingイベントが発生し

が、 GridViewコントロールが 編集モードに入る前に。これにより、 イベントが発生するたびに カスタムルーチン( 編集操作のキャンセルなど)を実行するイベント処理メソッド を提供できます。

この問題を解決するには、この目的のためにRowUpdatingイベントを処理します。で、あなたに役立つはずの例があります:

「>

:また

GridView.RowEditing event

が、私はあなたがフィールドにあなたのTextBoxをバインドするバインド言葉を使うべきと考えています詳細について

は、Data-Binding Expressions Overview

関連する問題