PDA

View Full Version : (مبتدی) مشکل در تنظیمات datagridview



docendo
یک شنبه 22 بهمن 1391, 21:55 عصر
با دورد
در دیتا گرید ویو پیش فرض است که وقتی در یکی از سلولها حرفی یا عددی نوشته میشود بلافاصله سطر بعدی بوجود می آید
من میخواهم سطر بعدی فقط و فقط بعد از نوشتن در آخرین سلول دیتاگرید بوجود آید
امیدوارم منظورم را قابل فهم نوشته باشم

m.khani_121
یک شنبه 22 بهمن 1391, 22:57 عصر
میتونی خودت برای کاربر اضافه کردن سطر رو ببندی و اگه کاربر روی سطر و ستون آخر کلیک کرد سطر بعدی را با کد اضافه کنی .

docendo
یک شنبه 22 بهمن 1391, 23:17 عصر
مشکل همیجاست چگونه

ma.rad
یک شنبه 22 بهمن 1391, 23:53 عصر
تیک Enable Adding دیتاگرید را بردارید یا تو خصوصیت گردبد False کنید
و یه شرط بزارید که اگر تو سلول اخر کلیک شده یه سطز اصافه کنه، دستور اضافه کردن سطر رو هم قبلا گفتم

docendo
دوشنبه 23 بهمن 1391, 01:57 صبح
تیک Enable Adding دیتاگرید را بردارید یا تو خصوصیت گردبد False کنید
و یه شرط بزارید که اگر تو سلول اخر کلیک شده یه سطز اصافه کنه، دستور اضافه کردن سطر رو هم قبلا گفتم


تشکر
وقتی Enable Adding را خصوصیت False قرار دهیم که نمیشه در سطر اول هم نوشت
خلاصه نشد که نشد
حالا بگردم تو اینترنت شاید راهی یافتم و اگر شما هم پیشنهادی دیگر بنظرتان میرسد ممنون میشوم

docendo
دوشنبه 23 بهمن 1391, 10:22 صبح
برای سطر اول : در لودفرم سطر رو اضافه کن

private void Form1_Load(object sender, EventArgs e)
{
this.dataGridView1.Rows.Add();
}

سطرهای بعد رو هم از رویدادهای گریدویو استفاده کن.


در این حالت حاصل ضرب دو سلول که با کلیک روی سلول آخری در آن نوشته میشد غیره فعال میشود و نمیشه حاصل ضرب را در سلول آخری مشاهده کرد

مهرداد صفا
دوشنبه 23 بهمن 1391, 10:55 صبح
با سلام
خصوصیت RowCount را برابر 1قرار دهید و خصوصیت AllowUserToAddRows را برابر با false قرار دهید.
در رویداد CellEndEdit چک کنید که اگر آخرین سلول ویرایش شده است یک ردیف به ردیفها اضافه شود.به این صورت:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.ColumnCount - 1 & e.RowIndex == dataGridView1.RowCount - 1)
{
dataGridView1.RowCount++;
}
}

docendo
دوشنبه 23 بهمن 1391, 11:37 صبح
تشکر تا حدودی درست شد اما یک ایراد اساسی داره
اینکه وقتی دوتا سلول ضرب بسته میشه تا حاصل ضرب به سلول آخرین ستون نوشته شود
وقتی سلول آخری کلیک میکنم سطر بعدی درست میشود (تشکر) اما اما حاصل ضرب نوشته نمیشود با کلیک به سلول دیگری از آخرین ستون حاصل ضرب نوشته میشود که میبایست با کلیک روی همان سلول حاصل ضرب نوشته شود

docendo
دوشنبه 23 بهمن 1391, 11:48 صبح
یک ایراد دیگری هم توی برنامه من هست و اون اینکه من تعریف کرده ام که برای سلولهای 0 و 2 و 3 فقط عدد نوشته شود تا اینجاش درسته و وقتی بجای عدد حرف باشه پیغام میدهد

if (cell != null)
{
// if (e.ColumnIndex == 2)
//if (e.ColumnIndex == 3)
if (e.ColumnIndex == 0 || e.ColumnIndex == 2 || e.ColumnIndex == 3)
{
char[] chars = e.FormattedValue.ToString().ToCharArray();
foreach (char c in chars)
{
if (char.IsDigit(c) == false)
{
MessageBox.Show("You may only enter numbers in the columns 1, 3 och 4");

// this.dataGridView1.Rows.Clear();
// dataGridView1.ClearSelection();
// dataGridView1[0, e.Rowindex].SelectAll();
// dataGridView1[0, e.Rowindex].Clear();
// dataGridView1[0, e.Rowindex].Focus();
e.Cancel = true;
break;
}
}
}
}

اما میخواهم بعد از پیغام اون اون حرفی که نوشته شده دوباره پاک شود اما من

// dataGridView1[0, e.Rowindex].Clear();
را نوشتم که حواب نمیدهد و بجاش چی بنویسم

مهرداد صفا
دوشنبه 23 بهمن 1391, 18:01 عصر
اگر می خواهید مقدار را پاک کنید می توانید به این صورت عمل کنید:
dataGridView1[0,e.RowIndex].value="";

docendo
دوشنبه 23 بهمن 1391, 18:51 عصر
قبلا هم امتحان کرده بودم جوابی نداد
نوشته پاک نکرد

khokhan
دوشنبه 23 بهمن 1391, 19:39 عصر
قبلا هم امتحان کرده بودم جوابی نداد
نوشته پاک نکرد



dataGridView1[0,e.RowIndex].value=null;

ma.rad
دوشنبه 23 بهمن 1391, 19:46 عصر
در این حالت حاصل ضرب دو سلول که با کلیک روی سلول آخری در آن نوشته میشد غیره فعال میشود و نمیشه حاصل ضرب را در سلول آخری مشاهده کرد

برا سلول آخز بنویسید که اگرکاربر اینتز یا تب زد یه سطر جدید ایجاد بشه و مثلا فکوس بشه تو سلول اول سطر جدید

docendo
دوشنبه 23 بهمن 1391, 20:13 عصر
با درود به دوستان

شاید من راه اشتباه میروم هرکاری کردم نشد
ببینید خود برنامه را گذاشتم
یک برنامه تمرینی بدون دیتابیس است

docendo
سه شنبه 24 بهمن 1391, 00:22 صبح
این کد نسبت به کدهای قبلی بهتره
اما راضی نیستم اونیکه من میخواهم نیست

int i;
if (e.ColumnIndex == 0 || e.ColumnIndex == 2 || e.ColumnIndex == 3)
if (!int.TryParse(Convert.ToString(e.FormattedValue), out i))
{
e.Cancel = true;

MessageBox.Show("the input is numeric ");

}

ma.rad
سه شنبه 24 بهمن 1391, 00:49 صبح
جواب تمام سوالتون اینجاست
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=%DA%A9%D9%85%DB%8C%D8%A7%D8%A8

docendo
سه شنبه 24 بهمن 1391, 00:57 صبح
دستتان درد نکند
چطوری این را سرچ گردید
وقتی از توی همین سایت سرچ میکنم فقط 5 صفحه بیشتر نمیده که میشه 7 یا 8 ماه قبل درحالی که این لینک شما مربوط به دوسال قبل است

docendo
سه شنبه 24 بهمن 1391, 14:48 عصر
جواب تمام سوالتون اینجاست
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=%DA%A9%D9%85%DB%8C%D8%A7%D8%A8


لینک خوبی است اما کامل نیست

من پاسخ پرسشهای خود در آن لینک 11 صفحه ای پیدا نکردم


برای مثال
سوال اول
چگونه Foreach loop بنویسم که وقتی سلول 2 یا 3 را فراموش کردم بنویسم پیفام دهد که سلول خالی است

سوال دوم
استفاده از Backspace است که اگر در سلول 2 یا 3 بجای عدد تکست نوشته شده بعد از دیدن پیغام اخطار وقتی پیغام را میبندیم تکست سلول مورد نظر پاک شود

سوال سوم
وقتی روی یکی از سلولها کلیک میکنیم اتومات بترتیب شماره در سلول اول شماره بیندازد که اگر فراموش کردیم سلول اول را بنویسیم خودش را انتخاب کند

جواب این سوالها در اون لینک نبود