PDA

View Full Version : حذف کردن مقادیر تکراری در listbox



amin1000
چهارشنبه 05 خرداد 1389, 07:22 صبح
سلام.من میخوام مقادیر موجود در یک ستون جدول را با مقادیر موجود در یک listbox مقایسه کنم ودر صورتی که یک فیلد مقدار تکراری داشت مقدار آن در listbox حذف شود .به نظر دوستان چکار کنم؟

M.YasPro
چهارشنبه 05 خرداد 1389, 08:36 صبح
سلام
امتحان نکردم ولی فکر کنم جواب میده :


private void ComparisonAndDelete(DataTable dt, string columnName)
{
List<string> ListBoxItems = new List<string>();

ListBoxItems = ListOfListBoxItems(listBox1);

foreach(DataRow row in dt.Rows)
foreach (string item in ListBoxItems)
{
int index=0;
int count = 0;
if (item == row[columnName].ToString())
count++;
if (count > 1)
ListBoxItems.Remove(row[columnName].ToString());

index++;
}

listBox1.Items.Clear();
listBox1.Items.AddRange(ListBoxItems.ToArray());
}

private List<string> ListOfListBoxItems(ListBox listBox)
{
List<string> list = new List<string>();
foreach (object item in listBox.Items)
list.Add(item.ToString());
return list;
}

amin1000
چهارشنبه 05 خرداد 1389, 09:12 صبح
سلام .یه توضیح درباره نحوه فراخونیسش میدی؟

M.YasPro
چهارشنبه 05 خرداد 1389, 09:21 صبح
شما متد ComparisonAndDelete رو فراخوانی کن با یه دیتاتیبل و نام ستونی از دیتابیست که میخوای با آیتم های listbox مقایسه کنی .

M.YasPro
چهارشنبه 05 خرداد 1389, 09:34 صبح
جواب نمیده!


اگر ارور داره متن ارور رو بزارید .

amin1000
چهارشنبه 05 خرداد 1389, 09:39 صبح
SqlCommand objcommand2 = new SqlCommand("select visittime from paziresh ", objconnection);
SqlDataAdapter objdataadapter2 = new SqlDataAdapter(objcommand2);
DataTable table2 = new DataTable();
objdataadapter2.Fill(table2);
ComparisonAndDelete(table2, "visittime");
ListOfListBoxItems(listBox1);



visittime نام فیلدی است که میخوام مقادیر list box با اون مقایسه بشن

M.YasPro
چهارشنبه 05 خرداد 1389, 09:48 صبح
ارور نداره ؟
خط آخر احتیاجی نیست .

amin1000
چهارشنبه 05 خرداد 1389, 09:53 صبح
ارور نمیده .مقادیر تکراری رو هم حذف نمیکنه!

M.YasPro
چهارشنبه 05 خرداد 1389, 10:26 صبح
من اینجاش برام گنگه :
شما اطلاعات رو چه جوری وارد لیست باکس کردی؟
اگر تکراری بود یعنی چی نسبت به اطلاعات جدول تکراری بود یا نسبت به ایتم های listbox ?

amin1000
چهارشنبه 05 خرداد 1389, 10:35 صبح
دوست عزیز من میخوام اگه مقدار یک آیتم از لیست باکس در فیلد مورد نظ وجود داشت اون آیتم از لیست باکس حذف شود.

M.YasPro
چهارشنبه 05 خرداد 1389, 11:09 صبح
ببخش سرم خیلی شلوغ بود دیر شد .
این دیگه فکر کنم جواب بده .


private void ComparisonAndDeleteNew(DataTable dataTable, string columnName)
{
List<string> list = new List<string>();
list = ListOfListBoxItems(listBox1);

foreach (object item in list)
{
foreach (DataRow row in dataTable.Rows)
{
if (item.ToString() == row[columnName].ToString())
{
listBox1.Items.Remove(item);
}
}
}
}

private List<string> ListOfListBoxItems(ListBox listBox)
{
List<string> list = new List<string>();
foreach (object item in listBox.Items)
list.Add(item.ToString());
return list;
}

amin1000
چهارشنبه 05 خرداد 1389, 11:12 صبح
در ضمن فیلد visittime از نوع datetime هست

amin1000
چهارشنبه 05 خرداد 1389, 11:23 صبح
Column 'visitime' does not belong to table این خطارو میده

esmaeily-hosein
چهارشنبه 05 خرداد 1389, 11:23 صبح
public class ListBoxEx : ListBox
{
UniqueObjectCollection items;
public ListBoxEx()
{
items = new UniqueObjectCollection(this);
}
~ListBoxEx()
{
base.SelectedIndex = -1;
base.Dispose();
items.Clear();
items = null;

}

private bool isUnique = true;
[DefaultValue(true)]
public bool IsUnique
{
get
{
return isUnique;
}
set
{
isUnique = value;
}
}
[Editor("System.Windows.Forms.Design.ListControlStringColle ctionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
[DesignerSerializationVisibility(DesignerSerializat ionVisibility.Content)]
[Localizable(true)]
[MergableProperty(false)]
public new UniqueObjectCollection Items
{
get
{
return items;
}
}


[ListBindable(false)]
public class UniqueObjectCollection : ObjectCollection
{
ListBoxEx owner;
public UniqueObjectCollection(ListBoxEx owner)
: base(owner)
{
this.owner = owner;
}

public new void Add(object val)
{
if (owner.IsUnique && this.IndexOf(val) < 0)
{
base.Add(val);

}
}
public new void AddRange(object[] values)
{
foreach (var item in values)
{
if (owner.IsUnique && this.IndexOf(item ) < 0)
{
base.Add(item);

}
}
}
}


}//end class

M.YasPro
چهارشنبه 05 خرداد 1389, 11:39 صبح
private void ComparisonAndDeleteNew(DataTable dataTable, string columnName)
{
List<string> list = new List<string>();
list = ListOfListBoxItems(listBox1);

foreach (object item in list)
{
foreach (DataRow row in dataTable.Rows)
{
if (DateTime.Parse(item.ToString()) ==DateTime.Parse(row[columnName].ToString()))
{
listBox1.Items.Remove(item);
}
}
}
}

private List<string> ListOfListBoxItems(ListBox listBox)
{
List<string> list = new List<string>();
foreach (object item in listBox.Items)
list.Add(item.ToString());
return list;
}


اینو امتحان کنید .

SokooteShab1
شنبه 27 فروردین 1390, 11:50 صبح
سلام دوستان تابع M.Yas خیلی عالی بود من هم همین مشکل را دارم ولی اگر ورودی list box را از table نگرفته باشم مثلا بعضی از سطرهای یه گرید را به لیست داده باشم ، تو فراخوانی تابع چه پارامتری رو باید بهش بدم؟؟؟؟
لطفا کمکم کنید........