Datagridview видимые линии сетки даже без данных С#C#

Место общения программистов C#
Ответить
Anonymous
 Datagridview видимые линии сетки даже без данных С#

Сообщение Anonymous »

У меня есть datagridview, который отображает данные, но отображаемые данные не заполняют весь datagridview, который показывает серый фон datagridview. Я хочу, чтобы линии сетки представления данных отображались даже без данных в каждой строке.
Изображение


к счастью, я нашел код по этому поводу (это код для свойства AutoSizeColumnsMode == Fill, но мне нужно, чтобы для этого свойства было установлено значение AllCells для более длинные строки внутри каждого столбца)
сначала я подумал, что это тот код, который я ищу:

Код: Выделить всё

private void dataGridView1_Paint(object sender, PaintEventArgs e)
{
int rowHeight = this.dataGridView1.RowTemplate.Height;

Pen slategraypen = new Pen(Brushes.SlateGray,0.5f);
slategraypen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel;
slategraypen.Alignment = System.Drawing.Drawing2D.PenAlignment.Center;

int h = this.dataGridView1.ColumnHeadersHeight + (rowHeight) * (this.dataGridView1.NewRowIndex);

Bitmap rowImg = new Bitmap(this.dataGridView1.Width, rowHeight);

Graphics g = Graphics.FromImage(rowImg);

Rectangle rFrame = new Rectangle(1, 1, this.dataGridView1.Width-4, rowHeight);

g.DrawRectangle(slategraypen, rFrame);

Rectangle rFill = new Rectangle(2, 1, this.dataGridView1.Width - 4, rowHeight-1);

g.FillRectangle(Brushes.White, rFill);

// for rowheaders drawing. in my case, I dont want to show the rowheaders so I didnt include this in my code
//Rectangle rowHeader = new Rectangle(2, 2, this.dataGridView1.RowHeadersWidth - 2, rowHeight - 4);

//g.FillRectangle(new SolidBrush(this.dataGridView1.RowHeadersDefaultCellStyle.BackColor), rowHeader);

int w = this.dataGridView1.RowHeadersWidth-40;// -40 is the width of the row header that I dont want to show

for (int j = 0; j < this.dataGridView1.ColumnCount; j++)
{
w += this.dataGridView1.Columns[j].Width;
g.DrawLine(slategraypen, new Point(w, 0), new Point(w, rowHeight));
}

int loop = (this.dataGridView1.Height - h) / rowHeight;

for (int j = 0; j < loop + 1; j++)
{
e.Graphics.DrawImage(rowImg, 0, h + j * rowHeight);
}
}
и это произошло:

[img]https:/ /i.stack.imgur.com/Jok6l.png[/img]


Но когда я ввожу длинную строку в столбец, происходит следующее:
обратите внимание на правая часть datagridview, некоторые столбцы сжимаются из-за того, что свойство fill установлено для autosizecolumnsmode
Изображение


Я пытался изменить свойство AutoSizeColumnsMode на allcells, и это произошло:
каждый раз, когда я прокручивал горизонтальную полосу прокрутки, линии, нарисованные ниже, рисовались неправильно места. я не совсем уверен, произойдет ли то же самое, если я прокрутлю вертикальную полосу прокрутки вверх и вниз.

[img]https:/ /i.stack.imgur.com/HUn4E.png[/img]


Мне нужна ваша помощь в написании правильного кода для этого. Буду очень признателен за вашу помощь.

Подробнее здесь: https://stackoverflow.com/questions/527 ... ta-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»