我使用ASPxGridView
和EntityDataSource
作为其数据源。在EntityDataSource
中,我编写了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的原因是参数和连接超过1个表以便在GridView中显示。)
答案 0 :(得分:1)
首先,您必须在表格中拥有主要ID,并且您必须在表单中将其插入,以便您可以插入它,或者理想情况下,您可以设置递增键,只需输入值。 然后你必须为控件设置value属性。 然后它应该工作。
答案 1 :(得分:0)
我解决了这个问题。 在gridview中我有模板列(我在CommandArgument中传递两个参数):
<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();
}
}
这是有效的。您也可以使用它来更新gridview行。