PDA

View Full Version : عدم تکراری بودن داده در تکست باکس



arash ahmadi
چهارشنبه 21 شهریور 1386, 18:29 عصر
برای اینکه کاربر عدد تکراری ( که در بانک داده موجود است) وارد تکست باکس نکند از چه رویدادی باید استفاده کرد؟ یعنی قبل از اینکه کل فرم را که تکست باکس های زیادی هم داره پر کنه. (بعد از پر کردن ان تکست باکس سیستم پیغام بدهد که داده تکراری است و به کاربر اجازه نده که تکست بعدی رو وارد کنه)

regbyte
چهارشنبه 21 شهریور 1386, 19:21 عصر
رویداد Validated
البته باید چک کردن وجود آن مقدار را خودتان انجام دهید.

PC2st
چهارشنبه 21 شهریور 1386, 23:35 عصر
@ regbyte :
فکر کنم منظورتون همون رویداد Validating باشه. :-)

@ arash ahmadi :
در رویداد Validating از خاصیت e.Cancel استفاده کنید.

arash ahmadi
پنج شنبه 22 شهریور 1386, 08:27 صبح
@ regbyte :
فکر کنم منظورتون همون رویداد Validating باشه. :-)

@ arash ahmadi :
در رویداد Validating از خاصیت e.Cancel استفاده کنید.

میشه کدتون را بنویسید یا بیشتر توضیح بدید؟

bpzone
پنج شنبه 22 شهریور 1386, 09:04 صبح
من برای این کار از تابع های که برات نوشتم استفاده میکنم

تابع Check_Valid_Sh رو در Event Leave تکست باکس فراخونی میکنم و مقدار موجود در تکست باکس رو براش میفرستم

این تابه پارامترهای مورد نظر رو Set میکنه و بعدش اطلاعات رو از پایگاه داده میگیره



privatebool Check_Valid_Sh(string test)
{
int tmp;
string IndexSort = "Sh_Hesab__Account_Information";
string TableName = "Account_Information";
_SqlCommand = "SELECT Sh_Hesab__Account_Information FROM Account_Information";
object[] value = newobject[1];
value[0]=int.Parse(test);
tmp = DBF.FindRow(_ConnectionString, _SqlCommand, value, TableName, IndexSort, _FormName);
if (tmp == -1)
{
returnfalse;
}
else
returntrue;
}



توی این تابع اطلاعات درخواستی از پایگاه داده درخواست میشه
اگه اطلاعات توی پایگاه وجود داشته باشه که Index مورد نظر توی پایگاه برات ارسال میشه
اگه هم وجود نداشته باشه مقدار ( -1 ) برات ارسال میشه






publicint FindRow(string _ConnectionString, string _SqlCommand, object[] arrValues, string TableName, string IndexSort,string FormName)
{
MyFunction MF = new MyFunction();

objConnection.ConnectionString = _ConnectionString;
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = _SqlCommand;

try
{
objConnection.Open();
}
catch (SqlException error)
{
MF.WriteError(error.Number, error.Message, FormName);
}

try
{
objDataAdapter.Fill(objDataSet, TableName);
}
catch (SqlException error)
{
MF.WriteError(error.Number, error.Message, FormName);
}
objConnection.Close();

DataView objDataView = new DataView(objDataSet.Tables[TableName]);
objDataView.Sort = IndexSort;
return (objDataView.Find(arrValues));
}


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

موفق باشی

PC2st
پنج شنبه 22 شهریور 1386, 10:43 صبح
میشه کدتون را بنویسید یا بیشتر توضیح بدید؟
رویداد Validating پس از رویداد Leave شلیک (fire) میشه، در این رویداد بررسی میکنیم که آیا داده هایی که در textBox وارد شدند، معتبر هستند یا خیر؟ مشخص کردن معتبر بودن یا معتبر نبودن داده هایی که کاربر وارد کرده، بر عهده خودمون هست و اگر داده هایی که کاربر وارد کرده بود، معتبر نبود با قرار دادن e.Cancel = true مانع از خروج کاربر از textBox میشیم و مجبور میکنیم که کاربر یک داده معتبر رو در textBox وارد کنه.


مثلا، رویداد Validating مربوط به textBox1 میتونه چیزی شبیه به زیر باشه:


private void textBox1_Validating(object sender, CancelEventArgs e)
{
if(textBox1.Text == "")
{
e.Cancel = true;
}
}

توجه کنید که رویداد Validating درصورتی شلیک (fire) میشه که در کنترل (Control) بعدی، خاصیت CausesValidation برابر true باشد.

arash ahmadi
پنج شنبه 22 شهریور 1386, 11:21 صبح
ممنون از راهنمایی های مفید شما. مشکلم حل شد.