/ / неможливо редагувати DataGridView, заповнений результатами запиту LINQ - c #, winforms, linq, datagridview, linq-to-xml

не вдається редагувати DataGridView, заповнені результатами запиту LINQ - c #, winforms, linq, datagridview, linq-to-xml

Коли я використовую результати запиту linq-to-xml длязаповнити datagridview, я не можу редагувати datagridview. Я спробував встановити для властивості datagridview "readonly" значення "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;

Відповіді:

4 для відповіді № 1

Так, можна прив’язати до списку, створеного з 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 для відповіді № 2

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