2012-01-05 18 views
0

私の更新コマンドに問題があります。それは、テキストボックスのコントロールを見つけるが、それは新しい値を入力しないと私は理由を把握することはできません。私はいくつかのチュートリアルをやっているし、遠くになっていない。私の更新イベントでは、テキストを更新するPagesというクラスがあります。これは、テキスト値を手動で追加すると機能します。問題は、テキストボックスから新しく更新されたテキストにアクセスすることです。更新イベントが新しい値を取得しない

<asp:GridView ID="CustomGridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="Name" AutoGenerateSelectButton="true" 
    ShowHeaderWhenEmpty="True" ShowFooter="true" AutoGenerateEditButton="true" OnDataBound="CustomGridView_DataBound" 
    OnRowEditing="CustomGridView_CancelEditCommand" OnRowCommand="CustomGridView1_RowCommand" 
    OnLoad="CustomGridView1_Load" OnRowUpdated="CustomGridView1_RowUpdated" OnRowUpdating="CustomGridView1_RowUpdating" OnRowCancelingEdit="CustomGridView1_RowCancelingEdit" 
    ShowHeader="true"> 
      <Columns> 
     <asp:TemplateField HeaderText="Page Name" HeaderStyle-HorizontalAlign="Left"> 
      <ItemTemplate> 
       <%# Eval("Name") %> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="Name" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Path" HeaderStyle-HorizontalAlign="Left"> 
      <ItemTemplate> 
       <%# Eval("Path") %> 
      </ItemTemplate> 
      <EditItemTemplate>      
       <asp:TextBox ID="Path" runat="server" Text='<%# Bind("Path") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Route Value" HeaderStyle-HorizontalAlign="Left"> 
      <ItemTemplate> 
       <%# Eval("RouteValue") %> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="RouteValue" runat="server" Text='<%# Bind("RouteValue") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="RegExp" HeaderStyle-HorizontalAlign="Left"> 
      <ItemTemplate> 
       <%# Eval("RegExp") %> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="RegExp" runat="server" Text='<%# Bind("RegExp") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 
    </Columns>   
</asp:GridView> 

ここでこの部分は私が答えに方法RowUpdated方法をprefere発射されていない私の更新イベントは、あなたが処理する必要があり、更新後の値を取得するには

protected void CustomGridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) 
{ 
    if (e.Exception == null && e.AffectedRows == 1) 
    { 
     Pages pages = new Pages(); 
     SystemPage SySPage = new SystemPage(); 
     SySPage.Name = e.NewValues[0].ToString(); 
     SySPage.Path = e.NewValues[1].ToString(); 
     SySPage.RouteValue = e.NewValues[2].ToString(); 
     SySPage.RegExp = e.NewValues[3].ToString(); 
     pages.Update(SySPage, xmlFile); 

     CustomGridView1.EditIndex = -1; 
     BindData(); 
    } 

} 

protected void CustomGridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 

    for (int i = 0; i < CustomGridView1.Columns.Count - 1; i++) 
    { 
     DataControlFieldCell cell = CustomGridView1.Rows[CustomGridView1.EditIndex].Cells[i] as DataControlFieldCell; 
     CustomGridView1.Columns[i].ExtractValuesFromCell(e.Keys, cell, DataControlRowState.Edit, false); 
    } 

    Pages pages = new Pages(); 
    SystemPage SysPage = new SystemPage(); 
    SysPage.Name = e.NewValues[0].ToString(); 
    SysPage.Path = e.NewValues[1].ToString(); 
    SysPage.RouteValue = e.NewValues[2].ToString(); 
    SysPage.RegExp = e.NewValues[3].ToString(); 
    pages.Update(SysPage, xmlFile); 

    lblInsert.Text = e.NewValues[3].ToString(); 

    CustomGridView1.EditIndex = -1; 
    BindData(); 
} 
+0

"SysPage.Name"のデータ型は?それはまたTextBoxですか? – Aaron

+0

プロパティ "名前"フィールドを持つクラスオブジェクト – ONYX

答えて

1

を発射されていない理由はそこにありますGridViews RowUpdatedイベントhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowupdated.aspxは、RowUpdatingではありません。 GridViewの中の更新されたフィールドがRowUpdatedイベントのパラメータとして公開されGridViewUpdatedEventArgsに、プロパティ、NewValuesによって露出さ

<asp:GridView OnRowUpdated="GridViewUpdatedEventHandler" /> 

編集。

コードを要求しました私はこのコードを私がdev pcの近くにはないとテストできません。 コードファイルに次のメソッドを追加し、メソッドを指すようにGridViewsのOnRowUpdatedプロパティを設定します。

protected void CustomGridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) 
    { 
     if ((e.Exception == null) && (e.AffectedRows == 1)) 
     { 
      Pages pages = new Pages(); 
      SystemPage SysPage = new SystemPage(); 
      SysPage.Name = e.NewValues[0].ToString(); 
      SysPage.Path = e.NewValues[1].ToString(); 
      SysPage.RouteValue = e.NewValues[2].ToString(); ; 
      SysPage.RegExp = e.NewValues[3].ToString(); ; 
      pages.Update(SysPage, xmlFile); 

      CustomGridView1.EditIndex = -1; 
      BindData(); 
     } 
     else 
      // TO DO: ALERT the user the update errored 

    } 
+0

次に、GridViewrowの現在のフィールドを更新して取得することができません。GridView_Onupdatingで値を取得できません – ONYX

+0

私のコードにどのようにこれを行うかについてのいくつかのサンプルコードを与えます – ONYX

+0

GridViewUpdatedEventArgs http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewupdatedeventargsのNewValuesプロパティとOldValuesプロパティを使用してフィールドにアクセスする点を除いて、Updateの場合と同じ方法でイベントを処理します。 aspx – Lloyd

関連する問題