Принципиальный молчун
Зарегистрирован: 24 June 2008
Сообщения: 9
Примеры кода: 0
|
Вопрос по заголовкам строк |
24 June 2008 17:10 |
|
|
|
|
Добрый день, посмотрите пожалуйста простейший пример проекта грида, написанного руками.
В нем - 4 вариант установки заголовка строки. Из них первые 2 вариант, описанные в MSDN - не работают! Зато найденные два обходных варианта более-менее работают. В чем проблема со стандартными вариантами? Может быть я что-то важное пропустил? Кстати, если проект создать Form Designer'ом, то вариант 1 работает!!
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
class Test : Form
{
DataGridView grid;
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.Run(new Test());
}
public Test()
{
// Создаем таблицу и датасет
DataSet dsFruit = new DataSet();
DataTable tbl = new DataTable("Fruit");
DataColumn col = tbl.Columns.Add("Description", typeof(string));
col.AllowDBNull = false;
dsFruit.Tables.Add(tbl);
// Заполняем таблицу датасета данными
DataRow row;
row = tbl.NewRow();
row["Description"] = "Яблоки";
tbl.Rows.Add(row);
row = tbl.NewRow();
row["Description"] = "Груши";
tbl.Rows.Add(row);
row = tbl.NewRow();
row["Description"] = "Персики";
tbl.Rows.Add(row);
// Теперь создаем экземпляр BindingSource
BindingSource bsFruit = new BindingSource(dsFruit, "Fruit");
// Грид
grid = new DataGridView();
grid.Parent = this;
grid.DataSource = bsFruit;
// Вариант 1 - не работает
grid.Rows[1].HeaderCell.Value = "Header0";
// Вариант 2 - не работает
foreach (DataGridViewRow row1 in grid.Rows)
{
row1.HeaderCell.Value = row1.Index.ToString();
}
// Вариант 3 - работает
//grid.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(grid_CellFormatting);
// Вариант 4 - работает, но вариант плохой, т.к. рисует в фиксированном месте грида
//grid.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(grid_RowPostPaint);
}
void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
grid.Rows[e.RowIndex].HeaderCell.Value = e.RowIndex.ToString();
}
void grid_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
using (SolidBrush b = new SolidBrush(grid.RowHeadersDefaultCellStyle.ForeColor))
{
Font fnt = new Font("verdana", 10);
e.Graphics.DrawString(e.RowIndex.ToString(System.Globalization.CultureInfo.CurrentUICulture), fnt, b, e.RowBounds.Location.X + 20, e.RowBounds.Location.Y + 4);
}
}
}
Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 24 June 2008 17:09
|
|