Перемещение данных DataGridView слева направо, щелкнув по заголовку столбца

#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 — это текст, и проблема была здесь.