PDA

View Full Version : جلوگیری از ورود اطلاعات تکراری در گرید ویو و جلوگیری از خالی گذاشتن یکی از ستونها



ostovarit
یک شنبه 20 تیر 1389, 20:59 عصر
برای جلوگیری از ورود اطلاعات تکراری در گرید ویو و جلوگیری از خالی گذاشتن یکی از ستونها چه باید کرد ؟؟؟

کاربر اطلاعات را در گرید ویرایش میکند و گرید را Update میکند میخواهم قبل از Update و در زمان ویرایش اطلاعات را بررسی کنم تا تکراری نباید و کاربر سلول را خالی رها نکند لطفا چند راه پیشنهاد بدید من از کد زیر استفاده میکنم اما به دلیل باگ در گرید به مشکل بر میخوارم و ارور میدهد ارور را که سرچ کردم متوجه شدم که در گرید باگی وجود دارد که این روش عملی نیست:



private void dataGridViewSpesific1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 1)
{
SqlCommand cmdCheck = new SqlCommand();
cmdCheck.Connection = new myConnection().Cnn;
cmdCheck.CommandText = "select * from RegGoods where Code=@Code";
cmdCheck.Parameters.AddWithValue("@Code", dataGridViewSpesific1[1, e.RowIndex].Value.ToString());
SqlDataReader drch = cmdCheck.ExecuteReader();
drch.Read();
if (drch.HasRows)
{
FarsiMessage.Show("کد کالا قبلا به ثبت رسیده است.", "خطا", FarsiMessageBoxButtons.OK, FarsiMessageBoxIcons.Error);
this.BindGrid();
}

if (dataGridViewSpesific1[1, e.RowIndex].Value.ToString() == "")
{
FarsiMessage.Show("کد کالا معتبر نمی باشد.", "خطا", FarsiMessageBoxButtons.OK, FarsiMessageBoxIcons.Error);
this.BindGrid();
}
}
}



دنبال راه حلی به جز ایونت CellEndEdit هستم؟

voodoo01
یک شنبه 20 تیر 1389, 21:08 عصر
با سلام دوست عزیز ممکن چیزی که به نظر من رسیده کامل نباشه
ولی شما میتاونید فیلد که می خواهید تکراری نباشد از نوع uniq تعریف کنید و برای ما بقی فیلد ها مقدار not null را اعمال کنید .....
و خطاهای گرید را کنترل نمایید برای نمایش پیغام مناسب ....

با احترام فراوان

VOODOO

ostovarit
یک شنبه 20 تیر 1389, 21:32 عصر
با سلام دوست عزیز ممکن چیزی که به نظر من رسیده کامل نباشه
ولی شما میتاونید فیلد که می خواهید تکراری نباشد از نوع uniq تعریف کنید و برای ما بقی فیلد ها مقدار not null را اعمال کنید .....
و خطاهای گرید را کنترل نمایید برای نمایش پیغام مناسب ....

با احترام فراوان

VOODOO

!!!!!!!!!!!!!!!!!!!
ممنونم از توجهت ... ولی چه ربطی به سوال من داشت من دارم میگم میخوام موقع ویرایش گرید به کاربر مقادیر ورودی را چک کنم و یک پیغام به کاربر بدهم اگر مقدار ورودی تکراری بود یا سلول خالی بود ...

این کارایی که شما گفتی مربوط به طراحی دیتابیس هست که انجام دادم ...
من خطاهای گرید رو false کردم که نمایش ندهد و میخواهم پیغام خودم رو جایگزین کنم

voodoo01
دوشنبه 21 تیر 1389, 02:41 صبح
من دقیقا متوجه نشدم میبخشید دوست محترم
این کد را استفاده کردم ببین شاید به کارت بیاد

private void DataGridView1_CellValidated(Object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
string n;
n = testDataGridView[0, e.RowIndex].Value.ToString();
var joinQuery1 =
from upper in this.database1DataSet.Test
where upper.ID == n
select new { upper.ID, };

long count = joinQuery1.LongCount();


if (count > 0)
{
System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
messageBoxCS.AppendFormat("{0} = {1}", "ColumnIndex", "مقدار وارد شده تکراري است");
MessageBox.Show(messageBoxCS.ToString(), "مقدار وارد شده تکراري است");
}
}
}

Voodoo

ostovarit
دوشنبه 21 تیر 1389, 11:00 صبح
ممنونم از اینکه وقت گذاشتی و جواب دادی میشه لطف کنی کد و ایونت رو برام توضیح بدی؟

voodoo01
دوشنبه 21 تیر 1389, 16:20 عصر
فکر میکنم منظورت این کد باشه
n = testDataGridView[0, e.RowIndex].Value.ToString();
var joinQuery1 =
from upper in this.database1DataSet.Test
where upper.ID == n
select new { upper.ID, };


این کد شامل یک متغیر از نوع مجموعه Row هایی که توسط From جدا میشوند و دستور where جهت جداکردن مقداری که می خواهیم از داخل جدول test جدا میکند
به طور کلی joinQuery1 به صورت یک آریه ذخیره میشود که هر کاری خواستی متونی با آن انجام بدهی حتی میتوانی join یا group by یا غیره

this.database1DataSet.Test نام جدول که از Fill Dataset پر میشود
متغییر upper مقدار TAble Test داخل آن ذخیره میشود
فیلد ID هم در Table TEST تعریف شده است
اگه خواستی code sample براتون بزارم