PDA

View Full Version : سوال: مشکل با خاصیت CellValidting کنترل Datagridview (بررسی صحت داده ورودی )



aisana
سه شنبه 29 شهریور 1390, 16:14 عصر
سلام
من تو 1برنامه windows application از کنترل datagridview استفاده کردم توی خاصیت
CellValidting صحت داده ورودی توسط کاربر رو بررسی میکنم مشکلم اینه که وقتی کاربر دکمه ی enter رو می زنه کد هایی که نوشتم توی اون خاصیتو اجرا نمیکنه ، چرا؟ کجا چک کنم پس ؟ میخوام اگه اشتباه وارد کرد e.cancle=true کنم توی این خاصیت که این اجازرو میده فقط

f_pakzad
سه شنبه 29 شهریور 1390, 17:46 عصر
مطالبی کمیاب در مورد Data Grid View (http://barnamenevis.org/showthread.php?245726-%D9%85%D8%B7%D8%A7%D9%84%D8%A8%DB%8C-%DA%A9%D9%85%DB%8C%D8%A7%D8%A8-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-Data-Grid-View&highlight=%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB% 8C%D8%AF)

درپست 4 لینک بالا توضیح داده شده

aisana
چهارشنبه 30 شهریور 1390, 08:22 صبح
دیدم لینک بالا رو ممنون ولی مشکل من وقتی که دکمه enter توی 1 cell زده میشه و فوکوس میاد سطر پایین کدهایی که توی cellvalid نوشتم اجرا نمیشه

f_pakzad
چهارشنبه 30 شهریور 1390, 13:16 عصر
میشه نمونه برنامه بگذارید ؟من متوجه شکل نمیشم...

aisana
چهارشنبه 30 شهریور 1390, 14:28 عصر
میشه نمونه برنامه بگذارید ؟من متوجه شکل نمیشم...

مرسی از توجهتون

f_pakzad
چهارشنبه 30 شهریور 1390, 14:55 عصر
روشی که به ذهن من رسیده این هست که ابتدا یک متد به صورت زیرمینویسیم


private bool ValidGrid()
{

bool valid = true;

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
dataGridView1.Rows[i].Cells["Column1"].ErrorText = "";
var value = dataGridView1["Column1", i].Value;
if (value != null && value.ToString().Trim() == "abc")
{
valid = false;
dataGridView1.Rows[i].Cells["Column1"].ErrorText = "شماره را وارد کنید.";

}


}

return valid;
}

این متد یک مقدار بازگشتی دارد که مشخص کننده صحت ورود داده برای ههمه سطرهاست. حالا در رویداد CellValidated اید من را فراخوانی کنید

private void DataGridView1CellValidated(object sender, DataGridViewCellEventArgs e)
{
ValidGrid();
}

تا اینجا در صورت اشتباه نوشتن سلول در هر سطر ارور نمایش داده میشود. احتمالاً میخواهید موقع ذخیره شدن داده در صورت عدم صحت داده ذخیره نشود بنابراین در رویداد ذخیره بنویسید

if (ValidGrid())
{
//ذخیره
}

aisana
چهارشنبه 30 شهریور 1390, 15:05 عصر
. احتمالاً میخواهید موقع ذخیره شدن داده در صورت عدم صحت داده ذخیره نشود بنابراین در رویداد ذخیره بنویسید


بله همینطوره
الان توی برنامه واقعی که نوشتم دارم از همین روش استفاده میکنم ، به نظر شما وقتی تعداد رکرودهام بره بالا برنامه هنگ نمی کنه ؟

f_pakzad
چهارشنبه 30 شهریور 1390, 15:06 عصر
منظورتون از بالا چه حدی است؟ تا ۳۰۰ تا که خیر

aisana
چهارشنبه 30 شهریور 1390, 15:17 عصر
نه شاید بیشتر بشه برنامه انبار ممکنه به 1000 برسه
می خواستم 1 جوری چک کنم که همون اول که داده نا معتبر وارد کرد نذارم ولی انگار راهی نداره
1 سوال دیگه دارم خیلی داره اذیتم میکنه درباره commbobox دیتا گرید میشه بپرسم ؟:ناراحت:

f_pakzad
چهارشنبه 30 شهریور 1390, 15:45 عصر
بیشتر بشه برنامه انبار ممکنه به 1000 برسه
در یک حلفه افدام به وارد کردن ۱۰۰۰ سطر در گرید کنید و بعد ذخیره را بزنید تا ببینید هنگ میکند یا خیر


1 سوال دیگه دارم خیلی داره اذیتم میکنه درباره commbobox دیتا گرید میشه بپرسم ؟
بفرمایید

aisana
چهارشنبه 30 شهریور 1390, 15:59 عصر
من 1 combobox دارم که بوسیله Dataset یه دیتا بیس وصله بعد اینو به دیتا گرید ویو وصلش کردم
مثل کد زیر :

using (DataGridViewComboBoxColumn Combo = new DataGridViewComboBoxColumn())
{
Combo.Name = "Combo";

dataGridView1.Columns.Add(Combo);
Combo.DataSource = objDataSet.Tables["a
Combo.ValueMember = objDataSet["a"].Columns["id"].ToString
Combo.DisplayMember = "name";
Combo.DataPropertyName = dataGridView1.Columns["noe"].Name;


}


اینجوری لیست اسامی رو تو combo بهم نشون می ده ولی وقتی 1 مقدار از این لیستو انتخاب می کنم مثلا اسم ali رو id اسمو نشون میده یعنی اگه id علی 32 باشه با انتخاب علی و رفتن به خونه ی دیگه 32 نمایش داده میشه

aisana
چهارشنبه 30 شهریور 1390, 16:03 عصر
از طرفی می خوام با انتخاب هر آیتم مقدار valuemember که الان id هست بره توی فیلد "noe" بشینه که بعدا بتونم این مقدارو در دیتابیس در ج کنم
که این کار با این خط کد انجام میشه
Combo.DataPropertyName = dataGridView1.Columns["noe"].Name;

کجای کار ایراد داره؟

f_pakzad
چهارشنبه 30 شهریور 1390, 16:10 عصر
من 1 combobox دارم که بوسیله Dataset یه دیتا بیس وصله بعد اینو به دیتا گرید ویو وصلش کردم

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

aisana
چهارشنبه 30 شهریور 1390, 16:13 عصر
نه کدی 1 ستون combobox به دیتا گرید اضافه کردم
با همون کدی که توی پست 11 گذاشتم