نوشته شده توسط
majid_zarei_al
سلام
منظور من اینه که مثلا شش ردیف 4 ستون دارد. و ردیف هفتم به جای 4 ستون ، انگار یک ستون داشته و متن آن هم یک متن و در وسط ردیف قرار بگیرد. (مانند دسور Merg در جدول آفیس ) و در ادامه ردیف هشت به بعد هم ۴ ستون دارد
باز هم ممنون از جوابهاتون
اول یک کلاس جدید با وراثت از ListViewItem میسازیم که بتونیم وسط آیتم های لیست هدر مون رو مشخص کنیم :
private class ListViewHeader : ListViewItem
{
public ListViewHeader(string text)
{
Text = text;
}
}
حالا به ListView میگیم لطفا زحمت رسم اشیاء این کلاس ListViewHeader رو به خودمان بسپار تا اونجور که دلمون میخواد رسمش کنیم :
private class ListViewHeader : ListViewItem
{
public ListViewHeader(string text)
{
Text = text;
}
}
private void Form1_Load(object sender, EventArgs e)
{
listView1.View = View.Details;
listView1.OwnerDraw = true;
listView1.DrawColumnHeader += listView1_DrawColumnHeader;
listView1.DrawItem += listView1_DrawItem;
listView1.DrawSubItem += listView1_DrawSubItem;
listView1.Columns.Add("Column1");
listView1.Columns.Add("Column2");
listView1.Columns.Add("Column3");
listView1.Columns.Add("Column4");
for (var i = 0; i < 100; i++)
{
if (i % 7 == 0)
{
var header = new ListViewHeader("This is a header");
header.BackColor = Color.LightGreen;
listView1.Items.Add(header);
}
var newrow = new ListViewItem(new string[] { "data1", "data12", "data13", "data1" });
newrow.BackColor = (listView1.Items.Count % 2 == 0) ? Color.White : Color.LightGray;
listView1.Items.Add(newrow);
}
}
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
if (e.Item is ListViewHeader == false)
{
e.DrawDefault = true;
}
}
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
if (e.Item is ListViewHeader == false)
{
e.DrawDefault = true;
return;
}
var selected = ((e.State & ListViewItemStates.Selected) == ListViewItemStates.Selected);
using (var brush = new SolidBrush((selected) ? SystemColors.Highlight : e.Item.BackColor))
{
e.Graphics.FillRectangle(brush, e.Bounds);
}
using (var brush = new SolidBrush((selected) ? SystemColors.HighlightText : e.Item.ForeColor))
{
var format = new StringFormat { LineAlignment = StringAlignment.Center, Alignment = StringAlignment.Center };
e.Graphics.DrawString(e.Item.Text, e.Item.Font, brush, e.Bounds, format);
}
}
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
}