PDA

View Full Version : مقاله: ورود فقط اعداد در سلولی از datagridview



unique1984
دوشنبه 26 اسفند 1387, 19:02 عصر
با سلام
من اطلاعاتم رو در یک دیتاگریدویو وارد میکنم که به دیتابیس هم ، وصل نیست. حالا میخوام در یه سلول خاص فقط عدد وارد بشه و سایر کاراکتر ها رو قبول نکنه.
فرمتش رو هم عددی کردم. اما فایده نداره!
مطمئنا یه کار دیگه هم باید انجام بشه که من نمیدونم.
مرسی
ببخشید نوع تاپیک رو سهوا مقاله انتخاب کردم. قابل ویرایشم نیست!

rnm123
دوشنبه 26 اسفند 1387, 22:13 عصر
با سلام
تا انجایی که من میدونم و در برنامه هام با آن برخورد کرده ام و البته پیاده سازی هم کرده ام این است که این امکان در خود کنترل دیتاگریدوید موجود نیست و کاربر در زمان اجری برنامه هر داده ای را میتواند وارد کند و این خود کاربر است که باید نوع داده ورودی را کنترل کند .
شما میتوانید یک تابع تعریف کنید که یک پارامتر را گرفته و بررسی کند که آیا پارامتر ورودی عدد است یا نه؟
تابع فوق میتواند به شکل زیر باشد


}(bool testFunc( string str
}try
(int test = int.parse(str
return true
}
}catch
return false
}
}

unique1984
دوشنبه 17 فروردین 1388, 16:32 عصر
با تشکر از راهنمائیتون . اما من در اینجا چنین چیزی رو پیدا کردم. اما نمیدونم میشه به سی شارپ تبدیلش کرد یا نه؟
http://barnamenevis.org/forum/showthread.php?t=149204&highlight=datagridview

unique1984
سه شنبه 18 فروردین 1388, 18:39 عصر
دوستان ، یعنی این کد معادل سی شارپ نداره؟

Private WithEvents ctrl As Control
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlSho wingEventArgs) Handles DataGridView1.EditingControlShowing
If DirectCast(sender, DataGridView).CurrentCell.ColumnIndex = 0 Then
ctrl = e.Control : Else
ctrl = Nothing
End If
End Sub
Private Sub ctrl_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctrl.TextChanged
If Not IsNumeric(DirectCast(sender, Control).Text) Then
SendKeys.Send("{BackSpace}")
End If
End Sub

rnm123
چهارشنبه 19 فروردین 1388, 00:16 صبح
با سلام
کد زیر را در رویداد dataGridView1_CellValueChanged برنامه تان قرار دهید


if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
if (!StringProcessing.StringFunctions.IsNumeric(dataG ridView1[e.ColumnIndex, e.RowIndex].Value.ToString()))
dataGridView1[e.ColumnIndex, e.RowIndex].Value = string.Empty;

البته برای بررسی عدد بودن یا نبودن رشته ورودی یا باید یک تابع بنویسی یا از یک کلاس استفاده نمایی که در کد بالا از یک کلاس به اسم StringProcessing استفاده کرده ام که برات توی لینک زیر قرار داده ام که می تونی از اون استفاده کنی
http://www.mediafire.com/?sharekey=fb2766141b4b0c310de4fc1039a01674e04e75f6 e8ebb871

Happy_davood
چهارشنبه 19 فروردین 1388, 08:43 صبح
یک روش ساده تر هم هست و البته حالت ابتکاری داره ولی کاملاً جواب میده .

اولاً KeyPreview رو برای فرم True کنید .
بعدش در وقفه KeyPress فرم (دقت کنید گرید نه ! فرم) بنویسید :




private void Form_KeyPress(object sender, KeyPressEventArgs e)
{
if (this.dataGridView.CurrentCell != null)
{
if (this.dataGridView.CurrentCell.IsInEditMode == true)
{
switch (this.dataGridView.Columns[this.dataGridView.CurrentCell.ColumnIndex].Name)
{
case "ColumnName":
if ((e.KeyChar >= '0' && e.KeyChar <= '9') || e.KeyChar == '.' || e.KeyChar == '\b')
e.Handled = false;
else
e.Handled = true;
break;
}
}
}
}




یعنی اینکه اگه سلول مورد نظر گرید شما Null نباشه و در حالت ویرایش هم باشه ، کلید های اضافی رو فیلتر می کنید .
این روش ابتدائی به نظر میرسه ولی خوب 100% کار می کنه .