невозможно редактировать DataGridView, заполненный результатами запроса LINQ - PullRequest
3 голосов
/ 22 февраля 2010

Когда я использую результаты запроса linq-to-xml для заполнения сетки данных, я не могу редактировать таблицу данных. Я попытался установить свойство readonly для datagridview в false, и это не помогает. Я также добавил обработчик событий для cellBeginEdit и установил там точку останова, но она не была достигнута. Любая идея, что я делаю неправильно, или если это невозможно?

public class MergeEntry
{
  public string author    { get; set; }
  public string message   { get; set; }
}
...
var query = from entry in xmlDoc.Descendants("entry")
            select new MergeEntry
            {
              author = entry.Element("author").Value,
              message = entry.Element("msg").Value,
            }
var queryAsList = query.ToList();

myBindingSource.DataSource = queryAsList;
myDataGridView.DataSource = myBindingSource;

Ответы [ 2 ]

4 голосов
/ 23 февраля 2010

Да, можно связать список, созданный из Linq-To-Xml. Я пытался воспроизвести вашу проблему. Я сделал следующее:

  1. Создан пустой проект WindForm (VS 2008 и .Net 3.5)
  2. Добавлен DataGridView в форму.
  3. Подключены CellBeginEdit и CellEndEdit.
  4. Поместил следующий код в конструктор формы

string testXML =
        @"<p><entry>
          <author>TestAuthor1</author>
          <msg>TestMsg1</msg>  
          </entry></p>
        ";

XElement xmlDoc = XElement.Parse(testXML);

var query = from entry in xmlDoc.Descendants("entry")
            select new MergeEntry
            {
                author = entry.Element("author").Value,
                message = entry.Element("msg").Value,
            }; //You were missing the ";" in your post, I am assuming that was a typo.

//I first binded to a List, that worked fine. I then changed it to use a BindingList
//to support two-way binding.
var queryAsList = new BindingList<MergeEntry>(query.ToList());

bindingSource1.DataSource = queryAsList;
dataGridView1.DataSource = bindingSource1;

При запуске приложения WinForm отображалась редактируемая сетка, и события CellBeginEdit и CellEndEdit запускались, когда они должны были быть. Надеемся, что попытка воспроизвести с помощью описанных выше шагов поможет вам найти проблему, с которой вы столкнулись.

0 голосов
/ 24 февраля 2010

Поскольку вы используете ToList, ваш DataSource на самом деле List<MergeEntry>, поэтому тот факт, что он исходит из запроса Linq, ничего не меняет. Я подозреваю, что свойство ReadOnly столбцов (не DGV) установлено в true ... Я не вижу другой причины, по которой сетка не будет редактируемой

...