#c# #sorting #datagridview
#c# #сортировка #datagridview
Вопрос:
Я столкнулся со странной проблемой.
При загрузке программы все нормально и созданные строки отображаются правильно. Но когда я нажимаю на заголовок DataGridView для сортировки по возрастанию и убыванию, данные DataGridView во всех строках начинают перемещаться слева направо.
Я не знаю, в чем причина. Я внес это изменение в эту функцию, но проблема не решена.
private void dgvWF_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
dgvWF.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
dgvWF.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
}
Раньше этой проблемы не существовало.
РЕДАКТИРОВАТЬ 1:
dataGridView1.Columns[0].Visible = false;
string myXMLfile = @"C:UsersPCDesktopXMLFile1.xml";
ds = new DataSet();
ds.ReadXml(myXMLfile);
dt = ds.Tables["XMLFile1"];
if (dt != null)
{
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
dataGridView1.RowCount = dt.Rows.Count 1;
for (int i = 0; i < dt.Rows.Count; i )
{
dataGridView1.Rows[i].Cells[0].Value = dt.Rows[i][0].ToString();
dataGridView1.Rows[i].Cells[1].Value = dt.Rows[i][1].ToString();
}
dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.Automatic;
dataGridView1.Rows[dt.Rows.Count].DefaultCellStyle.BackColor = Color.Gray;
}
else if (dt == null)
{
dataGridView1.RowCount = 1;
dataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.Gray;
}
РЕДАКТИРОВАТЬ 2:
Моя проблема была решена.
RichTextBox rtbRootName = new RichTextBox();
string myXMLfile = @"C:UsersPCDesktopXMLFile1.xml";
DataSet ds = new DataSet();
ds.ReadXml(myXMLfile);
DataTable dt = ds.Tables["XMLFile1"];
if (dt != null)
{
dataGridView1.Rows.Clear();
dataGridView1.Refresh();
dataGridView1.RowCount = dt.Rows.Count 1;
for (int i = 0; i < dt.Rows.Count; i )
{
rtbRootName.Clear(); rtbRootName.Text = dt.Rows[i][1].ToString();
dataGridView1.Rows[i].Cells[0].Value = rtbRootName.Rtf;
dataGridView1.Rows[i].Cells[1].Value = dt.Rows[i][0].ToString();
}
dataGridView1.Rows[dt.Rows.Count].DefaultCellStyle.BackColor = Color.LightGray;
}
else if (dt == null)
{
dataGridView1.RowCount = 1;
dataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.LightGray;
}
Комментарии:
1. Как вы заполняете сетку? Установить
dgvWF.ColumnHeadersDefaultCellStyle = DataGridViewContentAlignment.MiddleLeft
. и попробуйте.2. Пожалуйста, смотрите EDIT1. Я
DataGridViewRichTextBoxColumn.cs
также использовал. У меня раньше не было этой проблемы, но я не знаю, какое изменение в моей программе вызвало эту проблему. Данные перемещаются до тех пор, пока они полностью не закончатся.3. Как мы можем получить местоположение данных в ячейке, если datagridview?
4. Я не вижу ни DataGridViewRichTextBoxColumn, ни DataGridViewRichTextBoxCell. Пока попробуйте использовать столбец DataGridViewTextBoxColumn по умолчанию, чтобы увидеть, есть ли ошибка в пользовательском столбце. Кроме того, переместите
dataGridView1.Rows.Clear();
передif
блоком. УдалитеdataGridView1.Refresh();
иdataGridView1.RowCount = dt.Rows.Count 1;
и используйте.Rows.Add(..)
вместо этого метод.dataGridView1.Rows.Add(dt.Rows[i][0].ToString().Trim(), dt.Rows[i][1].ToString().Trim());
.5. Я не понял, как использовать DataGridViewTextBoxColumn. И моя проблема не была решена. Но я внес эти изменения, и проблема была решена. Пожалуйста, смотрите EDIT2. Корневое имя — это не текст, а RichTextBox. DataTable — это текст, и проблема была здесь.