PDA

View Full Version : مبتدی: اضافه کردن آیتم جدید 4 ستونه به ListView



majid_zarei_al
جمعه 01 آذر 1398, 20:28 عصر
سلام
سوال خنده داری دارم.
می خوام آیتم جدید چند ستونه اضافه کنم . نمیشه. ListViewItem newrow=new ListViewItem();
newrow.SubItems[0].Text = "data1";
newrow.SubItems[1].Text = "data12";
newrow.SubItems[2].Text = "data13";
newrow.SubItems[3].Text = "data1";

listView1.Items.Add(newrow);
ولی فقط data1 چاپ میشه. بقیه ستونا نمیاد.
تازه بهsubitem 1,2,3 هم ایراد میگیره. این ایراد:
151001:افسرده::افسرده::افسرده:

the king
جمعه 01 آذر 1398, 21:12 عصر
سلام
سوال خنده داری دارم.
می خوام آیتم جدید چند ستونه اضافه کنم . نمیشه. ListViewItem newrow=new ListViewItem();
newrow.SubItems[0].Text = "data1";
newrow.SubItems[1].Text = "data12";
newrow.SubItems[2].Text = "data13";
newrow.SubItems[3].Text = "data1";

listView1.Items.Add(newrow);
ولی فقط data1 چاپ میشه. بقیه ستونا نمیاد.
تازه بهsubitem 1,2,3 هم ایراد میگیره. این ایراد:
151001:افسرده::افسرده::افسرده:


listView1.View = View.Details;
listView1.Columns.Add("Column1");
listView1.Columns.Add("Column2");
listView1.Columns.Add("Column3");
listView1.Columns.Add("Column4");

var newrow = new ListViewItem(new string[] { "data1", "data12", "data13", "data1" });
listView1.Items.Add(newrow);

majid_zarei_al
جمعه 01 آذر 1398, 21:57 عصر
سلام مجدد.
با تشکر . درس شد
یک سوال دیگه؟
* می خوام یکی در میان خطوط رنگ زمینه هر ردیف تحت کنترل باشه؟
ممنون:متفکر::متفکر::متفکر:

the king
شنبه 02 آذر 1398, 08:05 صبح
سلام مجدد.
با تشکر . درس شد
یک سوال دیگه؟
* می خوام یکی در میان خطوط رنگ زمینه هر ردیف تحت کنترل باشه؟
ممنون:متفکر::متفکر::متفکر:



listView1.View = View.Details;
listView1.Columns.Add("Column1");
listView1.Columns.Add("Column2");
listView1.Columns.Add("Column3");
listView1.Columns.Add("Column4");
for (var i = 0; i < 100; i++)
{
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);
}

majid_zarei_al
شنبه 02 آذر 1398, 18:02 عصر
سلام.
آقا دستت درد نکنه. درست شد. ولی مطمئنم دیروز این کد رو زدم و جواب نداد.
باری به هر جهت خیلی ممنون.
:تشویق::تشویق::تشویق:

majid_zarei_al
شنبه 02 آذر 1398, 20:38 عصر
سلام
ادامه مشکلات:اشتباه::متفکر::متفکر:
اگر بخوام یک ردیف 4 ستونه رو Merg کنم و فقط یک عبارت بنویسم ، باید چه کنم؟؟ ممنون از کمک فوری و بسیار خوبتون:لبخندساده::لبخندساد :

ASHKANLAEI
شنبه 02 آذر 1398, 20:53 عصر
در یک حلقۀ for، هر بار yourListViewItem رو به یک آیتم لیست اختصاص بدید و این حلقه foreach رو داخلش بنویسید:
foreach (string sub in yourListViewItem.SubItems)
yourListViewItem.Text += sub;

majid_zarei_al
شنبه 02 آذر 1398, 22:24 عصر
سلام. و ممنون
متاسفانه جواب نداد
:ناراحت::ناراحت:

ASHKANLAEI
یک شنبه 03 آذر 1398, 14:36 عصر
ویرایشش کردم بازم جواب نمیده؟

the king
یک شنبه 03 آذر 1398, 14:50 عصر
ویرایشش کردم بازم جواب نمیده؟
یک لیست دارن که چهار تا ستون داره، طبعا مادامی که قالب بندی چهار ستونی سر جاش باشه، یا متن اولین ستون رو تغییر میدید یا متن همه ستون ها، اما متن ستون ها از کادر ستون فراتر نمیره.
به هر حال تا وقتی چهار سنونه است، متن ها بهم نمی چسبن و متن ستون اول هم کل سطر رو پوشش نمیده.
من اینجور برداشت می کنم که میخوان در یک سطر خاص حالت نمایشی مشابه یک ListViewGroup رو داشته باشن.

majid_zarei_al
یک شنبه 03 آذر 1398, 21:03 عصر
سلام
منظور من اینه که مثلا شش ردیف 4 ستون دارد. و ردیف هفتم به جای 4 ستون ، انگار یک ستون داشته و متن آن هم یک متن و در وسط ردیف قرار بگیرد. (مانند دسور Merg در جدول آفیس ) و در ادامه ردیف هشت به بعد هم ۴ ستون دارد
باز هم ممنون از جوابهاتون
:خجالت::خجالت::خجالت::خجالت:

ASHKANLAEI
یک شنبه 03 آذر 1398, 21:15 عصر
این چیزی که شما میگین رو بعید میدونم بشه با این کنترل ساخت.
چون در هر صورت باید چهار ستون وجود داشته باشن و چیزی مانند Merge در این کنترل ندیدم.
اما میتونید از ترکیب چند کنترل دیگه استفاده کنید یا اصلاً کنترل مخصوص خودتون رو بسازین.
از wpf هم میتونید کمک بگیرید.

ASHKANLAEI
یک شنبه 03 آذر 1398, 21:18 عصر
البته میتونید از کامپوننت های پیشرفته تری که در اینترنت موجودند استفاده کنید، مثل:
http://www.componentowl.com/
https://marketplace.visualstudio.com/items?itemName=ComponentOwl.BetterListViewExpress

the king
یک شنبه 03 آذر 1398, 21:53 عصر
سلام
منظور من اینه که مثلا شش ردیف 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;
}

majid_zarei_al
دوشنبه 04 آذر 1398, 19:42 عصر
سلام مجدد
با عرض تشکر فراوان، با کپی کردن کد شما ظاهر مشکل حل شد. خیلی هم ممنون.
فقط من باید بشینم بفهمم چجوریه؟
باز هم دس شما درد نکنه.
:تشویق::تشویق::تشویق::تشویق:: شویق::تشویق:

majid_zarei_al
جمعه 08 آذر 1398, 10:44 صبح
سلام مجدد
حالا می خوام یک بانک اطلاعاتی اکسس درست کنم. واین اطلاعات رو در آن ذخیره کنم.
لطفا یک لینک برای شروع کار با بانک اکسس معرفی کنید. البته یه چیزایی پیدا کردم و خوندم.ولی از اول آموزش نبود.
ممنون
:خجالت::خجالت::خجالت::خجالت: