У меня есть форма с datagridview
, которую нужно заполнить, когда пользователь завершит поиск. Я не привязываю данные к сетке, пока не будет выполнен поиск, потому что источник привязки зависит от того, какой поиск они выполняют.
У меня есть следующий код для загрузки данных путем вызова хранимой процедуры:
private void SearchData()
{
string returnMessage = string.Empty;
DateTime dateSelected = this.DatePicker.Value.Date;
// clear the DataGridView prior to running the search
DataGridView.DataSource = null;
switch (m_QueueSelected) // this is grabbed via the search criteria combobox
{
case 70: // search 1
Data.SearchOneTableAdapter.Fill(DataSet.spSearchOne, ref returnMessage, m_QueueSelected, dateSelected);
SearchOneBindingSource.DataSource = DataSet.spSearchOne;
DataGridView.DataSource = SearchOneBindingSource;
break;
case 80: // search 2
Data.SearchTwoTableAdapter.Fill(DataSet.spSearchTwo, ref returnMessage, m_QueueSelected, dateSelected);
SearchTwoBindingSource.DataSource = DataSet.spSearchTwo;
DataGridView.DataSource = SearchTwoBindingSource;
break;
default:
Data.SearchDefaultTableAdapter.Fill(DataSet.spSearchDefault, ref returnMessage, m_QueueSelected, dateSelected);
SearchDefaultBindingSource.DataSource = DataSet.spSearchDefault;
DataGridView.DataSource = SearchDefaultBindingSource;
break;
}
}
После привязки данных к сетке я выполняю некоторое форматирование столбцов, в том числе замораживаю первый столбец в сетке, чтобы при прокрутке по первому столбцу он всегда отображался. Я получал сообщение об ошибке, в котором говорилось что-то вроде 'you cannot load a frozen column after another frozen column
' Поскольку я использую несколько источников привязки, я обнаружил, что мне нужно сначала удалить источник данных, прежде чем загружать какие-либо другие. Поэтому я использую код, указанный выше:
DataGridView.DataSource = null;
Исправлено сообщение об ошибке «замороженный столбец». Однако вчера я применил фильтр заголовков столбцов , что вызвало некоторые проблемы. Фильтр создается и применяется к столбцам с использованием DataBindingComplete
Event
private void DataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
string filterStatus = DataGridViewFilterableColumnHeaderCell.GetFilterStatus(DataGridView);
if (!String.IsNullOrEmpty(filterStatus))
{
RecordCountLabel.Text = filterStatus;
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что я изменяю DataGridView.DataSource = null, там нет столбцов / ячеек, которые фильтр может определить, и происходит сбой при попытке выполнить дополнительный поиск. Если я перестану делать столбцы замороженными, мне не нужно будет устанавливать источник данных равным нулю, и у меня не будет проблем.
Короче говоря, кто-нибудь знает, как повторно использовать сетку данных с несколькими источниками привязки и использовать замороженный столбец, не устанавливая источник данных в нуль?