PDA

View Full Version : سوال: انتقال یک آیتم با subItems هایش به listview دیگر



alinoori76
شنبه 23 آذر 1398, 14:28 عصر
لطفا راهنمایی کنید اگر بخواهم از یک listview یک آیتم با subItems هایش را به listview دیگر منتقل کنم چگونه؟

ASHKANLAEI
شنبه 23 آذر 1398, 15:06 عصر
این کد برای منتقل کردن آیتم شماره (itemIndex) از listView1 به listView2 هست.
listView2.Items.Add(listView1.Items[itemIndex]);

alinoori76
شنبه 23 آذر 1398, 20:28 عصر
[QUOTE=ASHKANLAEI;2425571]این کد برای منتقل کردن آیتم شماره (itemIndex) از listView1 به listView2 هست.
listView2.Items.Add(listView1.Items[itemIndex]);[/QUOTE
سلام بازم نشد

مشکل من اینه که ی جستجو میکنم داخل لیست ویو 1 ی آیتم رو پیدا میکنه فقط همین آیتم رو بدون ساب آیتمها داخل لیست ویو 2 نمایش میده . کل آیتم و ساب آیتمها رو نمایش نمیده. ببخشید من مبتدی هستم اگه منظورم رو بد بیان میکنم شرمنده

the king
شنبه 23 آذر 1398, 20:55 عصر
[QUOTE=ASHKANLAEI;2425571]این کد برای منتقل کردن آیتم شماره (itemIndex) از listView1 به listView2 هست.
listView2.Items.Add(listView1.Items[itemIndex]);[/QUOTE
سلام بازم نشد

مشکل من اینه که ی جستجو میکنم داخل لیست ویو 1 ی آیتم رو پیدا میکنه فقط همین آیتم رو بدون ساب آیتمها داخل لیست ویو 2 نمایش میده . کل آیتم و ساب آیتمها رو نمایش نمیده. ببخشید من مبتدی هستم اگه منظورم رو بد بیان میکنم شرمنده
دقت کنید که Column ها و View شون (listView1.View) باید در هر دو ListView مشابه باشه تا ظاهر درستی داشته باشه.


var item = listView1.Items[itemIndex];
listView1.Items.RemoveAt(itemIndex);
listView2.Items.Add(item);

alinoori76
یک شنبه 24 آذر 1398, 15:20 عصر
151126
[QUOTE=alinoori76;2425587]
دقت کنید که Column ها و View شون (listView1.View) باید در هر دو ListView مشابه باشه تا ظاهر درستی داشته باشه.


var item = listView1.Items[itemIndex];
listView1.Items.RemoveAt(itemIndex);
listView2.Items.Add(item);


سلام . ی عکس گذاشتم تا بهتر متوجه مشکل بشید
اول تکست باکسهای نام و فامیل و شماره را وارد کرده دکمه ورود را میزنیم تکستهای داخل تکست باکسها به لیست ویو 1 اضافه میشود . بعد داخل تکست باکس جستجو یک حرف را تایپ میکنیم اگر شامل هر یک از لیست ویو های جدول 1 باشد را داخل لیست ویور2 نمایش دهد . الان کلمه حاوی حرف وارد شده را پیدا میکند ولی فقط همان کلمه را داخل ستون نام لیست ویور2 نمایش میدهد و تمام لیست و ساب آیتمها را نمایش نمیدهد.
خواسته من اینه که لیست ویو که کلمه پیدا شده داخل آن است را کامل همراه ساب فورمها در لیست ویو 2 نمایش دهد.
متاسفانه مشکل با شیوه فوق حل نشد

ASHKANLAEI
یک شنبه 24 آذر 1398, 15:33 عصر
خب شما کد هاتون در چه متغیری ذخیره میشه چه شکلی هست کدتون باید بگین دیگه.
این کدی که اینجا نوشته شد برای انتقال یک آیتم لیست 1 از روی شماره اش در لیست، به لیست 2 هست و مشکلی نداره.

the king
یک شنبه 24 آذر 1398, 18:45 عصر
151126[QUOTE=the king;2425594]

سلام . ی عکس گذاشتم تا بهتر متوجه مشکل بشید
اول تکست باکسهای نام و فامیل و شماره را وارد کرده دکمه ورود را میزنیم تکستهای داخل تکست باکسها به لیست ویو 1 اضافه میشود . بعد داخل تکست باکس جستجو یک حرف را تایپ میکنیم اگر شامل هر یک از لیست ویو های جدول 1 باشد را داخل لیست ویور2 نمایش دهد . الان کلمه حاوی حرف وارد شده را پیدا میکند ولی فقط همان کلمه را داخل ستون نام لیست ویور2 نمایش میدهد و تمام لیست و ساب آیتمها را نمایش نمیدهد.
خواسته من اینه که لیست ویو که کلمه پیدا شده داخل آن است را کامل همراه ساب فورمها در لیست ویو 2 نمایش دهد.
متاسفانه مشکل با شیوه فوق حل نشد

وقتی کدی که نوشتید رو ارائه نمی کنید راهنمایی کردن برای تغییرش هم دشوار میشه.

private void button2_Click(object sender, EventArgs e)
{
var search = textBoxSearch.Text.Trim();
if (search.Length == 0)
{
return;
}
foreach (ListViewItem item in listView1.Items)
{
if (item.Text.IndexOf(search, StringComparison.CurrentCultureIgnoreCase) >= 0)
{
listView1.Items.Remove(item);
listView2.Items.Add(item);
continue;
}
foreach (ListViewItem.ListViewSubItem subItem in item.SubItems)
{
if (subItem.Text.IndexOf(search, StringComparison.CurrentCultureIgnoreCase) == -1)
{
continue;
}
listView1.Items.Remove(item);
listView2.Items.Add(item);
break;
}
}
}

alinoori76
یک شنبه 24 آذر 1398, 19:02 عصر
151127 public partial class Form1 : Form
{
public string li;
public string li2;
public Form1()
{
InitializeComponent();

}


private void ButtonVOROOD_Click(object sender, EventArgs e)
{
if (TextBoxNAM.Text == "" || TextBoxFAMIL.Text == "" || TextBoxTEL.Text == "")
{
label5.Visible = true;
this.label5.Text = "لطفا فیلدهای فوق را وارد کنید";
}
else
{
List<string> s = new List<string>() { TextBoxNAM.Text, TextBoxFAMIL.Text, TextBoxTEL.Text };
ListViewItem a = new ListViewItem(s.ToArray());
ListView1.Items.Add(a);


TextBoxNAM.Text = "";
TextBoxFAMIL.Text = "";
TextBoxTEL.Text = "";
label5.Visible = false;
//int dd = ListView1.Items.Count;
//label8.Text = dd.ToString();
}

}
private void TextBoxSEARCH_TextChanged(object sender, EventArgs e)
{

if (TextBoxSEARCH.Text != "")
{
for (int i = 0; i < ListView1.Items.Count; i++)
{
for (int j = 0; j < ListView1.Columns.Count; j++)
{
li = ListView1.Items[i].SubItems[j].Text;
bool a = li.Contains(TextBoxSEARCH.Text);
if (a == true)
{
// li = ListView1.Items[i].SubItems[j].Text;
ListView2.Items.Add(li);


}
}


}
}

else
{
ListView2.Items.Clear();

}

}


private void TextBoxSEARCH_TextChanged_1(object sender, EventArgs e)
{


}









}
}

the king
یک شنبه 24 آذر 1398, 19:48 عصر
151127 public partial class Form1 : Form
{
public string li;
public string li2;
public Form1()
{
InitializeComponent();

}


private void ButtonVOROOD_Click(object sender, EventArgs e)
{
if (TextBoxNAM.Text == "" || TextBoxFAMIL.Text == "" || TextBoxTEL.Text == "")
{
label5.Visible = true;
this.label5.Text = "لطفا فیلدهای فوق را وارد کنید";
}
else
{
List<string> s = new List<string>() { TextBoxNAM.Text, TextBoxFAMIL.Text, TextBoxTEL.Text };
ListViewItem a = new ListViewItem(s.ToArray());
ListView1.Items.Add(a);


TextBoxNAM.Text = "";
TextBoxFAMIL.Text = "";
TextBoxTEL.Text = "";
label5.Visible = false;
//int dd = ListView1.Items.Count;
//label8.Text = dd.ToString();
}

}
private void TextBoxSEARCH_TextChanged(object sender, EventArgs e)
{

if (TextBoxSEARCH.Text != "")
{
for (int i = 0; i < ListView1.Items.Count; i++)
{
for (int j = 0; j < ListView1.Columns.Count; j++)
{
li = ListView1.Items[i].SubItems[j].Text;
bool a = li.Contains(TextBoxSEARCH.Text);
if (a == true)
{
// li = ListView1.Items[i].SubItems[j].Text;
ListView2.Items.Add(li);


}
}


}
}

else
{
ListView2.Items.Clear();

}

}


private void TextBoxSEARCH_TextChanged_1(object sender, EventArgs e)
{


}









}
}


شما li رو Add می کنید که یک SubItem ئه، باید بجای li اون ListView1.Items[i] رو Add کنید که Item ئه و شامل همه SubItem ها هم میشه.
خودش رو هم نه، یک کپی اش رو، با Clone ازش کپی میگیرید.
بعد Add کردن هم یک ;break اضافه کنید تا از حلقه for j خارج بشه.

private void TextBoxSEARCH_TextChanged(object sender, EventArgs e)
{
ListView2.Items.Clear();
if (TextBoxSEARCH.TextLength == 0)
{
return;
}
for (int i = 0; i < ListView1.Items.Count; i++)
{
for (int j = 0; j < ListView1.Columns.Count; j++)
{
li = ListView1.Items[i].SubItems[j].Text;
bool a = li.Contains(TextBoxSEARCH.Text);
if (a)
{
ListView2.Items.Add((ListViewItem)ListView1.Items[i].Clone());
break;
}
}
}
}

alinoori76
یک شنبه 24 آذر 1398, 21:52 عصر
با سپاس فراوان از لطف شما و راهنمایی دقیقتون .

11
شما li رو Add می کنید که یک SubItem ئه، باید بجای li اون ListView1.Items[i] رو Add کنید که Item ئه و شامل همه SubItem ها هم میشه.
خودش رو هم نه، یک کپی اش رو، با Clone ازش کپی میگیرید.
بعد Add کردن هم یک ;break اضافه کنید تا از حلقه for j خارج بشه.

private void TextBoxSEARCH_TextChanged(object sender, EventArgs e)
{
ListView2.Items.Clear();
if (TextBoxSEARCH.TextLength == 0)
{
return;
}
for (int i = 0; i < ListView1.Items.Count; i++)
{
for (int j = 0; j < ListView1.Columns.Count; j++)
{
li = ListView1.Items[i].SubItems[j].Text;
bool a = li.Contains(TextBoxSEARCH.Text);
if (a)
{
ListView2.Items.Add((ListViewItem)ListView1.Items[i].Clone());
break;
}
}
}
}

ROSTAM2
دوشنبه 25 آذر 1398, 08:54 صبح
سلام. اصلا نیاز به این همه کد و دوتا لیست ویو ندارید برای جستجوی یک آیتم در لیست ویو . آیتم هاتون اگه توی دیتا بیس هست کافیه فیلترش کنید و اونهایی که فیلتر شدن رو در لیستتون نمایش بدید همین.
واگه هم دیتابیسی در کار نیست و یک لیست ویو دارید که اطلاعاتتون رو به صورت موقت ذخیره می کنه میتونید آیتم هایی که جستجو شده رو Select کنید و متودی هم برای نمایش آیتم جستجو شده خود لیست ویو داره.
وگر نه که هیچی!!! :لبخند:

alinoori76
دوشنبه 25 آذر 1398, 09:57 صبح
سلام . تشکر من دیتا بیس ندارم لطف دارید.:لبخندساده::لبخندساده :

alinoori76
سه شنبه 26 آذر 1398, 13:49 عصر
سلام بیزحمت اگه مشکلی نیست متدی که برای جستجو در لیست ویو بدون دیتا بیس استفاده میشه رو بزارید که داخل همین لیست ویو نمایش بدهد و نیاز به لیست ویو دوم نباشد. پیشاپیش تشکر



سلام. اصلا نیاز به این همه کد و دوتا لیست ویو ندارید برای جستجوی یک آیتم در لیست ویو . آیتم هاتون اگه توی دیتا بیس هست کافیه فیلترش کنید و اونهایی که فیلتر شدن رو در لیستتون نمایش بدید همین.
واگه هم دیتابیسی در کار نیست و یک لیست ویو دارید که اطلاعاتتون رو به صورت موقت ذخیره می کنه میتونید آیتم هایی که جستجو شده رو Select کنید و متودی هم برای نمایش آیتم جستجو شده خود لیست ویو داره.
وگر نه که هیچی!!! :لبخند:

the king
سه شنبه 26 آذر 1398, 19:54 عصر
سلام بیزحمت اگه مشکلی نیست متدی که برای جستجو در لیست ویو بدون دیتا بیس استفاده میشه رو بزارید که داخل همین لیست ویو نمایش بدهد و نیاز به لیست ویو دوم نباشد. پیشاپیش تشکر

شما باید خارج از اون ListView همه ListViewItem هایی که دارید نگهدارید، مثلا در یک متغیر از نوع <List<ListViewItem مثلا ()<private _list = new List<ListViewItem و هر وقتی آیتمی به ListView اضافه می کنید، مثلا با اون دکمه ButtonVOROOD_Click، علاوه بر اینکه آیتم رو به ListView1 اضافه می کنید به list_ هم اضافه کنید، یعنی همراه ListView1.Items.Add(a) کد list.Items.Add(a)_ رو هم اجرا کنید.
اینطوری شما همیشه لیست همه آیتم ها رو، چه نمایش داده شده باشن و چه نمایش داده نشده باشن رو داخل list_ دارید.
حالا وقتی می خواهید جستجو کنید، بجای ListView1.Items سراغ list_ میروید و داخل list_ رو میگردید، مثلا بجای ListView1.Items[i].SubItems[j] از list[i].SubItems[j]_ استفاده می کنید.