2012-01-25 3 views
2

Я использую в качестве источника данных ASPxGridView и EntityDataSource. В EntityDataSource я пишу CommandText, поэтому я не могу установить «EnableInsert», «EnableUpdate» или «EnableDelete» в true. Вот почему я вручную манипулирую (вставляю, обновляю, удаляю) данные. Изменения вносятся вручную в базу данных. Но на стороне GridView эти ошибки приведены:Вставка/обновление/удаление для этого элемента управления отключена. сообщение EntityDataSource

Для вставки: "Insert is disabled for this control."
Для обновления: "Update is disabled for this control."
Для удаления: "Delete is disabled for this control."

Как я могу решить эту проблему?

(Причина использования CommandText где параметры и присоединение к более 1 таблиц для показа в GridView.)

+0

Примерно в это время (2012) ASPxGriView с EF был доступен только для чтения. Это намного лучше, так как даже сортировка по столбцу не работает. – Anderson

ответ

1

Сначала вы должны иметь первичный идентификатор в таблице, и вы должны иметь его в форме, так что вы можете вставить это, или в идеале, вы устанавливаете инкрементный ключ и только вводимые значения. Затем вам нужно установить значение свойства для управления. И тогда это должно сработать.

+0

Я уже вставляю, обновляю, удаляю данные. Но даже если я могу манипулировать данными, приводятся ошибки. Теперь я сделал трюк: я редактирую данные, а затем, наконец, вызываю метод «e.Cancel = true;» здесь «e» - «DevExpress.Web.Data.ASPxDataUpdatingEventArgs e». Таким образом, gridview считает «ОК, в результате, операция редактирования отменена, поэтому мне не нужно давать ошибку». А именно, я не решал проблему формально, я решил с непростым делом. – Ypci

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.

Смежные вопросы