0

SQL Server 2008 R2 Express、C# ASP.NET 4 を使用しています。

このT-SQL(データを含む)で作成された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 つを削除しようとすると機能しません。説明のない行の 1 つの [編集] をクリックすると、新しい値を入力する機会が得られますが、[更新] をクリックしても何も起こりません。

someDescription が入力された行を編集/削除しても問題ありません。オプティミスティック コンカレンシーを使用しない場合、空の記述に対しても編集と削除が機能します。

GridView が誤動作するのは正常ですか? 回避策はありますか?

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

4

1 に答える 1

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();
}

このリンクにアクセスしてください: gridview の追加、編集、更新、削除

于 2012-04-20T07:43:51.273 に答える