Коли я використовую результати запиту 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. Я намагався відтворити вашу проблему. Я зробив наступне:
- Створено порожній проект WindForm (VS 2008 та .Net 3.5)
- Додано DataGridView до форми.
- Підключили CellBeginEdit та CellEndEdit.
- Розмістив наступний код у конструкторі форми
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 ... Я не бачу жодної іншої причини, чому сітку не можна було б редагувати