PDA

View Full Version : سوال: numeric DataGridView Column



davidrobert
چهارشنبه 27 آذر 1392, 14:15 عصر
سلام و خسته نباشید
میخواستم ببینم چطور میتونم بعضی از فیلد های مورد نظر خودم رو کار کنم در رویداد کی پرس عدد بگیرد یعنی من 10 تا فیلد دارم از اون 10 تا فیلد 2 تا شون عدد میگیرد باید چیکار کنم در دیتاگرید ویو عدد بگریم فقط ، فقط روی 2 تا فیلد امکان پذیر باشد و همین طور تعیین کن بیشتر از عدد 100 رو نتونه وارد کنه تو فیلد بزرگ ترین که بتونه وارد کنه تا 100 باشه هتا به 101 هم نرسه .

Mofid.m
چهارشنبه 27 آذر 1392, 15:00 عصر
سلام دوست عزیز
در مورد سوال اول:
اول یه تابع بنویس تا کاربر نتونه مقادیر غیر مجاز رو وارد کنه
بعد تو رویداد KeyPress مربوط به سلول دیتاگرید یه if بزار که هر وقت e.ColumnIndex==X شد اون تابع فراخوانی بشه
و
راه دیگه اینه که برای اون ستونها از ComboBox استفاده کنی

davidrobert
چهارشنبه 27 آذر 1392, 15:28 عصر
سلام دوست عزیز
در مورد سوال اول:
اول یه تابع بنویس تا کاربر نتونه مقادیر غیر مجاز رو وارد کنه
بعد تو رویداد KeyPress مربوط به سلول دیتاگرید یه if بزار که هر وقت e.ColumnIndex==X شد اون تابع فراخوانی بشه
و
راه دیگه اینه که برای اون ستونها از ComboBox استفاده کنی
ممنون بابت راهنمای اگه نمونه سروسی در اختیارم قرار دهید خیلی ممنون میشم. چون جفت سوالم در مورد دیتاگرید ویو هستش.
این رو هم بگم نمایش تعداد 100 و هم اینکه در دیتاگرید ویو عدد بگیره برای 2 تا سلول میخواستم برای سلول تعداد و درصد میخواستم.

و آخرین رکورد رو در کادر Label نشان میدم که تکراری میشه وقتی به عدد 10 مرسد و آخرین شماره سند رو نشان نمیده.

sagggad
چهارشنبه 27 آذر 1392, 16:04 عصر
سلام دوست من.من دقیق متوجه منظورت نشدم اما برای اینکه کاربر بتونه فقط عدد وارد برنامه بکنه باید خاصیت KeyPreview فرم رو برابرTrue قراربدی.وبعد کدهایی که من در سورس زیر که برات گذاشتم استفاده کردم رو در رویداد KeyPress فرم بنویس.
لینک دانلود:114108
موفق باشید:لبخندساده:

davidrobert
چهارشنبه 27 آذر 1392, 17:10 عصر
سلام دوست من.من دقیق متوجه منظورت نشدم اما برای اینکه کاربر بتونه فقط عدد وارد برنامه بکنه باید خاصیت KeyPreview فرم رو برابرTrue قراربدی.وبعد کدهایی که من در سورس زیر که برات گذاشتم استفاده کردم رو در رویداد KeyPress فرم بنویس.
لینک دانلود:114108
موفق باشید:لبخندساده:

دسته گلتان درد نکونه دوست عزیز ولی من برای دیتاگرید ویو میخواستم همچین چیزی رو اینکه شما دادید برای کادر متن هستش.

sagggad
چهارشنبه 27 آذر 1392, 17:24 عصر
نه داداش همین رو اگر به جای کادر متن دیتاگرید ویو بذاری بازهم نمیشه توش چیزی به جز عدد تایپ کرد.
موفق باشید

khokhan
چهارشنبه 27 آذر 1392, 18:41 عصر
ممنون بابت راهنمای اگه نمونه سروسی در اختیارم قرار دهید خیلی ممنون میشم. چون جفت سوالم در مورد دیتاگرید ویو هستش.
این رو هم بگم نمایش تعداد 100 و هم اینکه در دیتاگرید ویو عدد بگیره برای 2 تا سلول میخواستم برای سلول تعداد و درصد میخواستم.

و آخرین رکورد رو در کادر Label نشان میدم که تکراری میشه وقتی به عدد 10 مرسد و آخرین شماره سند رو نشان نمیده.

.................................................. ..............................:لبخند:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if ((int)(((System.Windows.Forms.DataGridView)(sender )).CurrentCell.ColumnIndex) == 1)
{
e.Control.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Tex tboxNumeric_KeyPress);

}
}

private void TextboxNumeric_KeyPress(object sender, KeyPressEventArgs e)
{
Boolean nonNumberEntered;

nonNumberEntered = true;

if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)
{
nonNumberEntered = false ;
}

if (nonNumberEntered == true)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true ;
}
else
{
e.Handled = false;
}

}

davidrobert
پنج شنبه 28 آذر 1392, 09:35 صبح
.................................................. ..............................:لبخند:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if ((int)(((System.Windows.Forms.DataGridView)(sender )).CurrentCell.ColumnIndex) == 1)
{
e.Control.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Tex tboxNumeric_KeyPress);

}
}

private void TextboxNumeric_KeyPress(object sender, KeyPressEventArgs e)
{
Boolean nonNumberEntered;

nonNumberEntered = true;

if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)
{
nonNumberEntered = false ;
}

if (nonNumberEntered == true)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true ;
}
else
{
e.Handled = false;
}

}
ممنون آقا خوخان بابت کمکتان مشکل بنده در این ضمنی هل شو یک دنیا ممنون.
ولی برای این مشکلم برای به دست آوردن آخرین َشماره و محدود کردن عدد در دیتاگرید ویو که تا عدد 0 تا 100 را شخص کار بر وارد کند .کمک میخواستم از دوستان برنامه نویس عزیز.
من از این کد استفاده میکنم برای به دست آوردن آخرین شماره سند تا شماره سند جدید رو ثبت کنم ولی با مشکلی که بر خورد کردم شماره سند جدید را نمی توانم به دست بیارم یعنی تا عدد 10 رو به دست میارم و بالا تر از اون رو به دست می یارم. ممنون میشم کممک کنید بنده رو.
این هم کد بنده برای به دست آوردن اخرین شماره سند که وقتی به عدد 10 میرسد دیگه بزرگت تر از 10 رو نشان نمی دهد هتا بگم آن جدول رو از نوع ساختم ولی مشکل بر طرف نشود. و تو تمام فایل هام استفاده کردم جواب داد تو این جواب نمی دهد. ممنون میشوم.
این هم ورس بنده برای آخرین شماره. void GiveCodeDoc()
{
int codedoc = Convert.ToInt32(db.Tbl_ServiceFactorDocument.Max(a => a.SF_No_Documents));
int needcode = 1;
string strcode = " ";
object ObjCodeDoc = codedoc;
if (ObjCodeDoc.ToString() != "")
{
needcode = Convert.ToInt32(ObjCodeDoc.ToString()) + 1;
strcode = needcode.ToString();
strcode = strcode.PadRight(1, '0');
LblDoc.Text = strcode;
}
}
خواهش کسی کدی داره که در دیتاگرید ویو بیام یک فیلدش رو محدود کنم که فقط از 0 تا 100 رو نشان بده ممنون میشوم.

khokhan
پنج شنبه 28 آذر 1392, 12:58 عصر
با سلام
فرض می کنیم توی دیتا گرید یه ستون به نام Day داریم که کاربر بایستی اعداد ماه vرو که بین 1 تا 31 هست رو وارد کنه و اگر عددی بیشتر از اون چیزی رو که ما تعریف کردیم رو وارد کرد پیام خطا صادر کنه:لبخند:

در رویداد CellValueChanged دیتا گرید می نویسیم :

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
if (int.Parse(dataGridView1.Rows[e.RowIndex].Cells["Day"].Value.ToString()) < 1 | int.Parse(dataGridView1.Rows[e.RowIndex].Cells["Day"].Value.ToString()) > 31)
{
//پیام خطا
// پاک کردم مقدار وارد شده
}
}
}

حالا شما می تونین مطابق میلتون تغییرش بدین

davidrobert
پنج شنبه 28 آذر 1392, 14:26 عصر
این کد به وسیله آقا خوخان درست شد و دسته شان درد نکونه.
شما به وسیله این کد میتوانید مقدار عدد داده شده در اندیس و فیلد دیتاگرید محدود کنید تا عدد مورد نظر داده شود.
try
{
if (e.RowIndex >= 0)
{
if (int.Parse(DGV.Rows[e.RowIndex].Cells["ClmPorcant"].Value.ToString()) < 0 |
int.Parse(DGV.Rows[e.RowIndex].Cells["ClmPorcant"].Value.ToString()) > 100)
{
PersianMessageBox.Show("لطفاً عدد را از 0 تا 100 برای درصد دادن وارد کنید؟ ");



this. DGV.Rows[e.RowIndex].Cells["ClmPorcant"].Value = "";


}
}
}
catch{}

davidrobert
پنج شنبه 28 آذر 1392, 14:38 عصر
اشکال در نمایش آخرین شماره سند.
من از این کد برای به دست آوردن void GiveCodeDoc()
{
int codedoc = Convert.ToInt32(db.Tbl_ServiceFactorDocument.Max(a => a.SF_No_Documents));
int needcode = 1;
string strcode = " ";
object ObjCodeDoc = codedoc;
if (ObjCodeDoc.ToString() != "")
{
needcode = Convert.ToInt32(ObjCodeDoc.ToString()) + 1;
strcode = needcode.ToString();
strcode = strcode.PadRight(1, '0');
LblDoc.Text = strcode;
}
}
شماره سند استفاده میکنم که اخرین شماره سند را بسازد ولی ایرادی که دارد تا آخرین شماره 10 هستش رو به دست میاره و بعد از آن رو به دست نمی یارد. نمی دانم باید چیکار کنم برای به دست آوردن آخرین شماره سند درست ولی این تا 10 رو به دست میاره و بعد از آن به دست نمی آورد جدول هم از اول هم ساختم افاقه نکرد و همین طور تو اینترنت کلی گشتم ولی چیزی پیدا نکردم.
با Ef کد آخرین شماره سند رو به دست بیارم نوشتم دد چند تا یگه از کد کالا ، کد سرویس امتحان کردم درست جواب میده خیلی بیشتر از هم رو به دست میاره ولی این به دست نمی یاورد.
خواهش یکی کمک کنه خیلی نیاز دارم به همچین چیزی.