Пользовательский столбец в LinqServerModeDataSource - PullRequest
2 голосов
/ 27 августа 2010

В моей базе данных есть таблица Имена пользователей с полями:

Id
FirstName
LastName
LoginName

Теперь я хотел бы представить эту таблицу в ASPxGridView, используя LinqServerModeDataSource.

То, что я сделал, это:

<dxdtlnq:LinqServerModeDataSource ID="LinqServerModeDataSource1" runat="server"          OnSelecting="LinqServerModeDataSource1_OnSelecting"
  ContextTypeName="MyContext" EnableDelete="True" 
  EnableInsert="True" EnableUpdate="True" TableName="Users" >
</dxdtlnq:LinqServerModeDataSource>

protected void LinqServerModeDataSource1_OnSelecting(object sender, LinqServerModeDataSourceSelectEventArgs e) 
{           
   MyContext context = new MyContext();

   var qry = from s in context.Users select s;
   e.QueryableSource = qry;
}

Это прекрасно работает с моим ASPxGridView. Я могу отображать данные, вставлять и удалять, но теперь я хотел бы иметь дополнительный столбец UserName, который является FirstName + LastName.

Итак, я сделал что-то подобное:

Добавлен соответствующий столбец в мой ASPxGridView (FieldName = "UserName") и модифицированный обработчик OnSelecting:

protected void LinqServerModeDataSource1_OnSelecting(object sender, LinqServerModeDataSourceSelectEventArgs e) {
            KozuModelDataContext context = new MyContext();

        var qry = (from s in context.Substitutions
                   select new
                              {
                                  Id = s.Id,
                                  FirstName = s.FirstName,
                                  LastName = s.LastName,
                                  LoginName = s.LoginName,
                                  UserName = s.FirstName + " " + s.LastName,
                              }).AsQueryable();

        e.KeyExpression = "Id";
        e.QueryableSource = qry;
    }

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

Есть ли какое-либо решение для вставки и редактирования данных таким образом?

Спасибо за помощь

1 Ответ

3 голосов
/ 29 августа 2010

Я попытался воспроизвести эту проблему и увидеть это поведение. Чтобы иметь возможность редактировать данные, используя этот подход, я предлагаю вам сделать следующее:

1) Обработайте событие ASPxGridView.CellEditorIntitialize и установите для свойства e.Editor.ReadOnly значение false. Это позволит конечному пользователю изменять данные в редакторах EditForm;

2) Обработайте событие ASPxGridView.RowUpdating (RowInserting) и обновите данные вручную. Кроме того, вы должны установить для параметра e.Cancel значение true (чтобы сетка не обновляла сами данные), а также вызвать метод CancelEdit GridView, чтобы закрыть EditForm.

Я должен также упомянуть, что нет необходимости извлекать данные для UserName из БД. Это можно сделать с помощью обработчика событий CustomColumnDisplayText ASPxGridView:

protected void ASPxGridView1_CustomColumnDisplayText(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewColumnDisplayTextEventArgs e) {
    if(e.Column.FieldName == "") {
        object[] values = ASPxGridView1.GetRowValues(e.VisibleRowIndex, new string[] { "FirstName", "LastName" }) as object[];
        e.DisplayText = values[0].ToString() + " " + values[1].ToString();
    }
}

Если этот подход работает для вас, вы можете избежать использования события Selecting и, таким образом, установить TableName LinqServerModeDataSource. Это позволит вам предоставить функцию редактирования данных, не используя подход, который я объяснил выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...