Member 12562978 Ответов: 2

Удалить серийный номер, который последовательно перекрывает содержимое ячейки datagridview?


Я хочу, чтобы удалить цифры накладывается на ячейку элемента управления datagridview. Что же мне делать??
Скриншот находится здесь:
[Скриншот]


private void SearchForm_Load(object sender, EventArgs e)
        {
            DataTable cmbTable = new DataTable();
            DataGridViewTextBoxColumn dataGridViewTextBoxColumn = default(DataGridViewTextBoxColumn);
            int index = 0;
            int totalWidth = 0;

            this.WindowState = FormWindowState.Normal;

            cmbTable.Columns.Add("RecCode");
            cmbTable.Columns.Add("TheName");

            // set the datagrid columns and width etc
            for (index = 0; index <= this.displayColumns.Length - 1; index++)
            {
                dataGridViewTextBoxColumn = new DataGridViewTextBoxColumn();
                dataGridViewTextBoxColumn.DataPropertyName = this.displayColumns[index];
                dataGridViewTextBoxColumn.HeaderText = this.displayHeaders[index];
                dataGridViewTextBoxColumn.Width = this.displayWidths[index];
                this.DgSearch.Columns.Add(dataGridViewTextBoxColumn);

                totalWidth += this.displayWidths[index];

                if (this.DgSearch.DataSource is DataTable)
                {
                    this.DgSearch.DataSource = ((DataTable)DgSearch.DataSource).DefaultView;
                }

                if (index == 0)
                {
                    this.Text = "Search: ";
                }

                cmbTable.Rows.Add(new object[] { this.displayColumns[index], this.displayHeaders[index] });
            }

            this.columnValue = string.Empty;
            this.Width = totalWidth + 25;

            // Column Headers in combo box to select the search column name
            this.CmbColumnName.DisplayMember = "TheName";
            this.CmbColumnName.ValueMember = "RecCode";
            this.CmbColumnName.DataSource = cmbTable;
            this.CmbColumnName.SelectedIndex = 0;
        }


Что я уже пробовал:

Проверка свойства элемента управления datagridview
Это метод краски ниже
protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
        { //this method overrides the DataGridView's RowPostPaint event 
            //in order to automatically draw numbers on the row header cells
            //and to automatically adjust the width of the column containing
            //the row header cells so that it can accommodate the new row
            //numbers,

            //store a string representation of the row number in 'strRowNumber'
            string strRowNumber = (e.RowIndex + 1).ToString();

            //prepend leading zeros to the string if necessary to improve
            //appearance. For example, if there are ten rows in the grid,
            //row seven will be numbered as "07" instead of "7". Similarly, if 
            //there are 100 rows in the grid, row seven will be numbered as "007".
            while (strRowNumber.Length < this.RowCount.ToString().Length) strRowNumber = "0" + strRowNumber;

            //determine the display size of the row number string using
            //the DataGridView's current font.
            SizeF size = e.Graphics.MeasureString(strRowNumber, this.Font);

            //adjust the width of the column that contains the row header cells 
            //if necessary
            if (this.RowHeadersWidth < (int)(size.Width + 20)) this.RowHeadersWidth = (int)(size.Width + 20);

            //this brush will be used to draw the row number string on the
            //row header cell using the system's current ControlText color
            Brush b = SystemBrushes.ControlText;

            //draw the row number string on the current row header cell using
            //the brush defined above and the DataGridView's default font
            e.Graphics.DrawString(strRowNumber, this.Font, b, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + ((e.RowBounds.Height - size.Height) / 2));

            //call the base object's OnRowPostPaint method
            base.OnRowPostPaint(e);
        }

Karthik_Mahalingam

покажите код

Member 12562978

Вот этот код

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. И когда все, что вы даете нам, - это очень плохой скриншот, мы понятия не имеем, как вы получили то, что у вас есть: и без кода, который сгенерировал это, мы понятия не имеем, как вам помочь.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Member 12562978

Вопрос Обновлен

2 Ответов

Рейтинг:
2

iam.thangnq

Я думаю, что тебе стоит комментировать метод базового вызова живописи :

//base.OnRowPostPaint


Рейтинг:
1

OriginalGriff

Начните с использования отладчика, чтобы точно узнать, какие значения вы туда помещаете - ваш скриншот показывает только один столбец, так что, по-видимому, у вас есть второй с нулевой шириной.
Также проверьте свои обработчики событий DGV: если вы обрабатываете любое из событий рисования ячеек или строк для обеспечения локального рисования, это может быть причиной эффекта.


Member 12562978

Извините, я не могу понять, что вы сказали о живописи событий.Да какое там событие OnRowPostPaint из элемента управления datagridview. Но что он там делает, я понятия не имею.Должен ли я показать вам этот метод события??

OriginalGriff

Да, потому что, скорее всего, именно это и добавляет информацию на ваш дисплей - и если он ожидает первый столбец с определенной шириной и не получает его...

Member 12562978

Во время отладки ничего не получается.Должен ли я также показать его дизайнерскую часть, потому что просто глядя на этот код, вы не можете судить о том, что происходит??

OriginalGriff

Вы ничего не увидите во время отладки события paint: начните с показа кода OnRowPostPaint и используйте отладчик, чтобы точно узнать, сколько столбцов вы создаете и какую ширину им даете - это просто, просто поставьте точку останова на этой строке:
вариант datagridviewtextboxcolumn.Width = this.displayWidths[индекс];
И запишите эти цифры!

Member 12562978

Сэр, на самом деле есть 2 столбца, в которых один является элементом Value, а другой-элементом display, и они имеют ширину 243.

OriginalGriff

Ваш снимок экрана показывает только один столбец, так что вам действительно нужно посмотреть на этот метод рисования.

Member 12562978

Я показал метод OnRowPostPaintEvent (), о котором идет речь.Пожалуйста, проверьте то же самое.

OriginalGriff

И вот оно: это код, который дает проблему.
Он пытается нарисовать номер строки в области заголовка строки, предполагая определенную ширину заголовка строки. Но на вашем скриншоте вообще нет заголовков строк, поэтому номер строки записывается поверх содержимого строки.

Две возможности:
1) прокомментируйте этот код. (Не удаляйте его, кто - то хотел, чтобы он был там, независимо от того, насколько плохо он написан-так что вполне вероятно, что он вам понадобится снова)
2) снова включите заголовки строк в свойствах DVG!