PDA

View Full Version : پیام موقع ورود مقدار تکراری در یک فیلد از دیتا گرید



azadeh_1510
دوشنبه 17 مرداد 1390, 14:33 عصر
با سلام خدمت دوستان
میخواهم موقع ورود مقدار تکراری در یک فیلد از دیتا گرید پیام بدهد که این مقدار قبلا وارد شده است.و در صورت تایید کاربر مقادیر تکراری قبلی را نمایش بدهد.
چطوری میتونم اینکارو انجام بدم.

flash118
دوشنبه 17 مرداد 1390, 15:27 عصر
با سلام بفرمایید تو یه تابع همراه با مثالش براتنون قرار دادم :

public DataTable RemoveDuplicateRows(DataTable dTable, string colName)
{
Hashtable hTable = new Hashtable();
ArrayList duplicateList = new ArrayList();

//اضافه کردن آیتم های تکراری به داخل اری لیست
foreach (DataRow drow in dTable.Rows)
{
if (hTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hTable.Add(drow[colName], string.Empty);
}

// datatable.حذف کردن لیست داده های تکراری از
foreach (DataRow dRow in duplicateList)
dTable.Rows.Remove(dRow);

//دیتا تیبل حالا خالی از مقادیر تکراری هست
return dTable;
}


یه نمونه برای استفاده:

protected void Button1_Click(object sender, EventArgs e)
{
string strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
SqlConnection conn = new SqlConnection(strConn);

SqlDataAdapter da = new SqlDataAdapter("select * from emp", conn);
DataSet ds = new DataSet();
da.Fill(ds, "Emp");

// پرکردن اطلاعات
DataTable dt = ds.Tables["Emp"];
//فراخوانی تابعی که نوشتیم اونی که اون بالا گذاشتم
dt = RemoveDuplicateRows(dt, "empname");
//dt الان بدون داده های تکراری هست

GridView1.DataSource = ds.Tables["Emp"].DefaultView;
GridView1.DataBind();
}

موفق باشید

azadeh_1510
سه شنبه 18 مرداد 1390, 09:53 صبح
از پاسختون ممنونم
منتها شاید بهتره که بیشتر توضیح بدم:
ببینین من میخوام وقتی توی تکست باکس LastName یک مقداری وارد میشه ؛توی دیتا گریدی که همه اطلاعات(من جمله فیلد LastName رو نشون میده)صرفا رکوردهایی را نشان بدهد که فیلد LastName آن شبیه به مقدار وارد شده در تکست باکس LastName را داراست.
مثلا اگر قبلا در دیتا گرید برای فیلد LastName ؛مقدار "احمدی" یا "احمد زاده" وارد شده و کاربر شروع به نوشتن "احمد" در تکست باکس LastName کرد ؛در دیتا گرید همزمان رکوردهایی که حاوی مقدار"احمد"هستند را نشان دهد.
برای اینکار چه باید کرد؟
با تشکر

azadeh_1510
سه شنبه 18 مرداد 1390, 10:08 صبح
در ضمن نمیخواهیم اجازه ثبت مقادیر تکراری را به کاربر ندهد؛ بلکه رکوردهایی که با نام خانوادگی مشابه آغاز میشوند را در گرید پایین فرم ببیند.

flash118
سه شنبه 18 مرداد 1390, 11:29 صبح
خوب دوست عزیز کافیه در همون متد که برای حذف مقادیر تکراری بیان کردیم یه کم انعطاف نشون بدید و با هر تغییر در تکس باکس LastName خوب اون بالا حذف میکردیم اینبار اگه مساوی هم بودن اضافه کنید و در آخذ دیتا تیبل رو به همین مقادیر مشابه به روز رسانی کنید خیلی راحت و آسون

azadeh_1510
سه شنبه 18 مرداد 1390, 13:05 عصر
ازتون ممنونم
من یه کار دیگه کردم که بنظرم رسید اینجا بذارم شاید برای کسی که خواست اینو امتحان کنه خوب باشه:
برای اینکار توی فرمی که میخواستم اضافه بر وارد شدن همزمان اطلاعات در تکست باکس نام؛ در زیر آن در دیتا گرید مربوط به اطلاعات آن نامهای مشابه آنرا نشان دهد این کد را برای event مربوط به TextChanged نوشتم:
person1BindingSource.Filter = "[Lname] like '%" + lnameTextBox.Text + "%'";

Esmail Solhkhah
سه شنبه 18 مرداد 1390, 17:08 عصر
ازتون ممنونم
من یه کار دیگه کردم که بنظرم رسید اینجا بذارم شاید برای کسی که خواست اینو امتحان کنه خوب باشه:
برای اینکار توی فرمی که میخواستم اضافه بر وارد شدن همزمان اطلاعات در تکست باکس نام؛ در زیر آن در دیتا گرید مربوط به اطلاعات آن نامهای مشابه آنرا نشان دهد این کد را برای event مربوط به TextChanged نوشتم:
person1BindingSource.Filter = "[Lname] like '%" + lnameTextBox.Text + "%'";

روش خوبیه

ولی ایکاش کد رو که مینویسید اینجا اول سلکتش کنید بهد از نوار ابزار دکمه #C رو بزنید تا موقع خوندن بصورت کد رنگی و تورفته دیده بشه


person1BindingSource.Filter = "[Lname] like '%" + lnameTextBox.Text + "%'";

موفق باشید.