У меня есть одна функция, заполняющая 5 DataGridView таким же образом, и другая функция, вызываемая, когда я изменяю значение текстового поля, чтобы упорядочить dgv в соответствии с текстом текстового поля
Каждый dgv имеет свое собственное текстовое поле, так чтоэто отдельные события "tbx.text_changed", все они вызывают мою функцию.
У меня также есть функция, сортирующая dgv по определенному столбцу, которая вызывается после того, как я заполнил dgv.Итак, по порядку, я заполняю dgv, затем упорядочиваю их по 3-му столбцу под названием Commentaires, затем ввожу некоторый текст, чтобы упорядочить их из 1-го столбца под названием Champ
Вчера я мог искать текст в каждом dgv, кроме одного.Я пытался исправить проблему, но сегодня я могу искать только в той, которая была ранее прослушена.
Каждый другой dgv выдает ошибку «нулевая ссылка», когда я ввожу букву в их текстовое поле.NullReference указывает, что источники данных пусты, однако они не должны быть.
Вчера для одинокого dgv была та же ошибка.
Вот моя функция для поиска текста:
if (text == "")
{
lblTexte.Text = "";
lblCompteur.Text = "";
for (int i = 0; i < dgv.Rows.Count - 1; i++)
{
dgv.Rows[i].Selected = false;
}
return;
}
if (dgv.RowCount < 1)
{
return;
}
else
{
DataTable d = new DataTable();
lblTexte.Text = "Champ répondant au critère: ";
tbx.SelectionStart = text.Length;
tbx.Text = text.ToUpper();
if ((dgv.DataSource.GetType()).Equals(typeof(DataView)))
{
d = ((DataView)dgv.DataSource).Table;
}
else
{
d = dgv.DataSource as DataTable;
}
DataRow[] row = d.Select("Champ like '%" + text + "%'");
List<int> listeIndex = new List<int>();
for (int i = 0; i < dgv.Rows.Count - 1; i++)
{
foreach (DataRow r in row)
{
if (((DataRowView)dgv.Rows[i].DataBoundItem).Row == r)
{
dgv.Rows[i].Selected = true;
listeIndex.Add(i);
}
else if (!listeIndex.Contains(i))
{
dgv.Rows[i].Selected = false;
}
}
}
}
if (dgv.SelectedRows.Count != 0)
{
dgv.FirstDisplayedScrollingRowIndex = dgv.SelectedRows[0].Index;
}
if (dgv.SelectedRows.Count == 0 && text == "")
{
lblCompteur.Text = "";
}
else
{
lblCompteur.Text = dgv.SelectedRows.Count.ToString();
}
Вот моя функция для заполнения представлений данных:
BindingSource bs = new BindingSource();
DataTable dt = new DataTable("source");
if (source.Any())
{
//Creation datatable
dt.Columns.Add("Champ", System.Type.GetType("System.String"));
dt.Columns.Add("Valeur", System.Type.GetType("System.String"));
dt.Columns.Add("Commentaires", System.Type.GetType("System.String"));
foreach (Enregistrement enr in source)
{
dt.Rows.Add(new object[] { enr.cle, enr.valeur, ControleurTypes.verificationEnregistrement(enr) });
}
bs.DataSource = dt;
grille.DataSource = bs;
return dt;
}
return dt;
А вот моя функция для их сортировки:
BindingSource bs = (BindingSource)dgv.DataSource;
DataTable dt = (DataTable)bs.DataSource;
DataView view = dt.DefaultView;
view.Sort = "Commentaires DESC";
dgv.DataSource = view;
В конце концов, я не могуМне удалось отсортировать мои Datatables, я думаю, что это связано с какой-то проблемой преобразования.Ошибка возникает в функции, которую я использую для упорядочения таблиц данных с использованием текста текстового поля.
DataRow[] row = d.Select("Champ like '%" + text + "%'");
В этой строке выдается ошибка «System.NullReferenceException», отладчик говорит, что d равно нулю.
Я не совсем разбираюсь в Dgv / DataViews / DataTables, поэтому буду признателен, если вы потратите время, чтобы помочь мне выяснить, в чем здесь проблема.