2012-04-20 9 views
0

私はSQL Server上のテーブルを持っているのSQL Server 2008 R2 Expressの、C#ASP.NET 4空の行は更新されません/削除

を使用していますこのT-SQL(データを含む)を使用して作成:

CREATE DATABASE [someDatabase] 
GO 
USE [someDatabase] 

CREATE TABLE someTable (someCode [int] NOT NULL IDENTITY(1,1) PRIMARY KEY, someDescription [nvarchar](50) NULL); 
INSERT INTO [dbo].[someTable] (someDescription) VALUES (''),('row 2, 1st non empty line'),('3'),(''),('5th row'); 
SELECT * FROM [dbo].[someTable] 

私も編集を含め、上記の表にのConnectionStringでGridViewのを含むDefault.aspxファイルを持っているとオプション(テンプレート)を削除していない - の背後には、コードを:

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="someCode" DataSourceID="SqlDataSource1"> 
     <Columns> 
      <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 
      <asp:BoundField DataField="someCode" HeaderText="someCode" 
       InsertVisible="False" ReadOnly="True" SortExpression="someCode" /> 
      <asp:BoundField DataField="someDescription" HeaderText="someDescription" 
       SortExpression="someDescription" /> 
     </Columns> 
    </asp:GridView> 

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConflictDetection="CompareAllValues" 
     ConnectionString="<%$ ConnectionStrings:someDatabaseConnectionString %>" 
     DeleteCommand="DELETE FROM [someTable] WHERE [someCode] = @original_someCode AND (([someDescription] = @original_someDescription) OR ([someDescription] IS NULL AND @original_someDescription IS NULL))" 
     InsertCommand="INSERT INTO [someTable] ([someDescription]) VALUES (@someDescription)" 
     OldValuesParameterFormatString="original_{0}" 
     SelectCommand="SELECT * FROM [someTable]" 
     UpdateCommand="UPDATE [someTable] SET [someDescription] = @someDescription WHERE [someCode] = @original_someCode AND (([someDescription] = @original_someDescription) OR ([someDescription] IS NULL AND @original_someDescription IS NULL))"> 
     <DeleteParameters> 
      <asp:Parameter Name="original_someCode" Type="Int32" /> 
      <asp:Parameter Name="original_someDescription" Type="String" /> 
     </DeleteParameters> 
     <InsertParameters> 
      <asp:Parameter Name="someDescription" Type="String" /> 
     </InsertParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="someDescription" Type="String" /> 
      <asp:Parameter Name="original_someCode" Type="Int32" /> 
      <asp:Parameter Name="original_someDescription" Type="String" /> 
     </UpdateParameters> 
    </asp:SqlDataSource> 

GridViewがデータベースのテーブルにきれいに縛られているようです。しかし、私はオプティミスティックな並行性を使用しているときに問題があります。それでは、説明のない行を削除することも、編集モードでそれらの行を更新することもできません。

GridViewはブラウザ(IE9、Chrome 18)で問題なく表示されますが、説明のない行の1つを削除しようとすると機能しません。説明行がない行の編集をクリックすると、新しい値を入力する機会が得られますが、「更新」をクリックすると何も起こりません。

someDescriptionを埋め込んだ行の編集/削除に問題はありません。オプティミスティックな並行性を使用すると、空の記述に対しても編集と削除が機能します。

GridViewが正常に機能しませんか?回避策はありますか?

行の編集モードまたは削除モードでGridViewテンプレートの検証ツールにアクセスできますか?

答えて

0

上記のコードでは、OnRowDeleting="GridView1_RowDeleting"OnRowEditing="GridView1_RowEditing"またはOnRowUpdating="GridView1_RowUpdating"イベントはありません。 GridView '<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />'で追加したように編集/更新と削除を行うには、それらのイベントを使用する必要があります。このような

何か:

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

訪問このリンク:Add, Edit, update, Delete gridview

+0

それは背後にあるコードなしで動作するはずです。実際には、楽観的同時実行モードを使用していないときの問題です。オプティミスティックな並行性を使用していないときにすべてが機能する理由または本当の質問、なぜこのモードで特にGridViewが完全に機能していないのですか?編集/削除は、someDescriptionフィールドにテキストがある場合にこのモードで動作することを覚えておいてください。 – Different111222