2

私はとをそのデータソースとして使用ASPxGridViewしています。EntityDataSourceEntityDataSource、CommandTextを記述しているため、「EnableInsert」、「EnableUpdate」、または「EnableDelete」をtrueに設定できません。そのため、データを手動で操作(挿入、更新、削除)します。変更は手動で行われ、データベースに渡されます。しかし、GridViewの側では、これらのエラーが表示されます。

挿入の場合:"Insert is disabled for this control."
更新の場合: "Update is disabled for this control."
削除の場合: "Delete is disabled for this control."

どうすればこの問題を解決できますか?

(CommandTextを使用する理由は、GridViewに表示するためのパラメーターと複数のテーブルの結合です。)

4

2 に答える 2

1

まず、テーブルにプライマリ ID が必要です。また、それを挿入できるようにフォームに含める必要があります。理想的には、インクリメント キーを設定し、値を入力するだけです。次に、コントロールの値プロパティを設定する必要があります。そして、それはうまくいくはずです。

于 2012-01-25T13:58:31.140 に答える
0

この問題を回避しました。gridview にはテンプレート列があります (CommandArgument で 2 つの引数を渡しています):

<asp:TemplateField>
                   <ItemTemplate>                           
                       <asp:ImageButton ToolTip="Delete" ID="button4" ButtonType="Image" ImageUrl="~/Projectimages/img_del.png" Text="" CommandName="Select" CommandArgument='<%#Eval("ID") + ";" +"Delete"%>' runat="server"/>
                   </ItemTemplate>
               </asp:TemplateField>

コード ビハインドでは、CommandArgument を分割し、値を変数に保存してから、それらを SelectedIndexChanged イベントで使用しています。

string selectCommand = "";
    int selectCommandID = -1;
    protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {                
            if (!e.CommandArgument.ToString().Contains(";"))
                selectCommand = "Select";
            else
            {
                selectCommandID = Convert.ToInt32(e.CommandArgument.ToString().Split(';')[0]);
                selectCommand = e.CommandArgument.ToString().Split(';')[1];
            }
        }            
    }

    protected void GridView_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (selectCommand == "Select")
        {
            //Select Code Here
        }
        else if (selectCommand == "Delete")
        {
            MyTestEntities context = new MyTestEntities();
            Table1 selectedRow = context.Table1.Single(a => a.ID == selectCommandID);
            context.Table1.DeleteObject(selectedRow);
            context.SaveChanges();

            EntityDataSource1.DataBind();
        }
    }

これは機能します。これをグリッドビュー行の更新にも使用できます。

于 2015-05-04T07:54:40.123 に答える