کاربرد کنترل DataGrideView در سی شارپ
در این جلسه قصد آموزش کنترل DataGrideView در سی شارپ را داریم.کاربرد اصلی این ابزار این است که به یک بانک اطلاعاتی وصل شود و اطلاعات رکوردها را به صورت جدولی نمایش می دهد، چون فعلا با هیچ نوع پایگاه داده ای آشنا نیستیم با یک سری از رویدادها و نحوه کار کردن این ابزار آشنا می شویم. (تذکر:در جلسه اول با محیط ویندوز فرم آشنا شدیم و همچنین کار کردن با دستورات را در آموزش برنامه نویسی تحت کنسول آموزش دادیم لطفا اگر مبتدی هستید با این دو آموزش شروع کنید)
دیتا گرید ویو را از پنجره Toolbox انتخاب کرده و روی فرم می گذاریم:
می خواهیم چند تا ستون به جدولمون اضافه کنیم برای این کار روی فلش کنار دیتاگرید ویو کلیک کرده و AddColumn را انتخاب می کنیم
در پنجره ای که باز می شود:
سه تا ستون اضافه می کنیم بنام های ردیف و نام و نام خانوادگی:
خاصیت RightToLeft پنجره فرم را برابر Yes قرار می دهیم تا تمام ستون ها از راست به چپ شروع شوند.
نکته: ویژوال سی شارپ چون از مبحث ارث بری استفاده می کند پس هر شیء ای که روی فرم قرار دهیم خصوصیات فرم را به ارث میبرد:
اگر خواستیم پهنای ستون ردیف را کمتر کنیم از فلش کنار کنترل دیتا گرید ویو EditColumns را انتخاب کرده:
خصوصیت Width را تغییر می دهیم که من در اینجا 60 در نظر گرفتم:
برنامه ای بنویسیم که مقادیری که کاربر وارد کرد را به فیلدهای جدولمان اضافه شود، فرممان را طبق فرم زیر طراحی می کنیم:
نحوه کد نویسی:
اگر بخواهیم در حین اجرای برنامه وقتی رکوردی به جدولمان اضافه شد یک شماره ردیف به صورت خودکار برایش در نظر بگیرد دیتا گرید ویو یک رویدادی دارد بنام CellFormatting که با نوشتن کد زیر این کار را انجام می دهد:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormatting EventArgs e)
{
dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
}
درج اطلاعات:
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Add(“”,textBox1.Text, textBox2.Text);
به رکورد جدولم اضافه کن (مقدار ستون ردیف , مقدار ستون نام, مقدار ستون نام خانوادگی)//
textBox1.Text = string.Empty;
textBox2.Text = string.Empty;
//بعد از اضافه شدن اطلاعات تکست ها را خالی کند
textBox1.Focus() ;
//نشانگر موس را بده به تکست اولی
}
حذف اطلاعات:
private void button2_Click(object sender, EventArgs e(
{
if (dataGridView1.RowCount != 1)اگر رکورد فعالی وجود داشت //
dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
//رکورد فعال را حذف کن یعنی آن رکوردی که کاربر انتخاب کرده است
}
اگر برای حذف رکوردی خواسته باشیم از Delete صفحه کلید استفاده کنیم:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete && dataGridView1.RowCount != 1)
dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
textBox1.Text = string.Empty;
textBox2.Text = string.Empty;
}
انتقال اطلاعات به TextBox ها:
اگر بخواهیم اطلاعات رکوردها را انتقال دهیم به textbox ها، کنترل دیتا گرید ویو یک رویدادی دارد بنام CellClick که این کار را برای ما امکان پذیر می کند:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
textBox1.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
}
برنامه را اجرا می کنیم:
آموزش کنترل DataGrideView در سی شارپ به پایان رسید، امیدواریم از این آموزش جالب و کاربردی لذت برده باشید.
با عرض سلام خدمت اساتید گرانقدر. آموزشهایتان بسیار عالی ومفید است.
سلام بی زحمت سورس کد sql راهم بگذارید
سلام و عرض ادب. در این پست نیازی به sql نیست و به صورت دستی بر روی ویندوز فرم کدنویسی شده است.
مختصر و مفید ، عالی بود
سلام
من ی فیلد دارم تو دیتا گرید ویو به نام جنیست مقادیرش true, false رو نشون میده من میخام اینو نشون نده بگه مرد یا زن این کدش چ جوریه ممنون میشم راعنمایم کنن عجله دارم
سلام و عرض ادب
لطفا از کد زیر استفاده است
‘زن’ case sex when 0 then
‘مرد’ when 1 then
end
سلام و عرض ادب
آقا من مقادیری را از اکسل وارد دیتا گرید ویو میکنم، حالا میخوام روشون یک سری عملیات محاسباتی انجام دهم، راه حل چیست؟
به عنوان مثال بزرگترین مقدار موجود در یک ستون، پر تکرار ترین مقدار در یک ستون
سلام ممنون میشم کمکم کنید.cellformatting کجای کد هست؟خودش با تولید دیتاگرید ویو ایجاد میشه یا اینکه باید خودمون ایونتشو بنویسیم؟
سلام و عرض ادب. cellformatting یک ایونت نمی باشد و جز Attribute ها هست و در هنگام ساخت به صورت ویزاردی خود آن ایجاد می شود. البته شما می تواند به صورت کدنویسی هم به آن دسترسی داشته باشید.
با تشکر از همراهی شما
من کد مربوط به شماره ردیف رو زدم به هیچ وجه کار نکرد
سلام و عرض ادب. لطفا با شماره تلفن شرکت هماهنگ کنید که به صورت ریموت از راه دور، مشکل شما را بررسی نمایند.
سلام مشکل قبلی حل شد.ممنون.یه سوال دیگه دارم اینه که اگه بخوام توی دیتاگریدویو سقف تعداد برای ردیف هام بذارم باید چکار کنم لطفا راهنماییم کنید چون وقت زیادی ندارم و باید به استاد تحویل بدم این کار رو
سلام وقت بخیر من وقتی کد AutoGenerateColumns =false میزنم گریدویوم خالی میشه چرا
سلام و عرض ادب. زمانی که شما ستون ها را از دیتابیس فرخوانی کنید نمی توانید از این کد استفاده نمایید و این کد تنها در صورتی استفاده می شود که شما به صورت دستی ستون ها را ایجاد و مقدار دهی کرده باشید.
با تشکر از همراهی شما
سلام اموزشتان عالی و مفید بود
اما من در ویژوال استودیو خود دیتا بیس ایجاد کرده ام و میخواهم این دیتا بیس را به GridView وصل کنم و اطلاعاات جدول های خود را حذف و ویرایش کنم
چنین اموزشی دارید؟
سلام و عرض ادب
فعلا چنین آموزشی را نداریم ولی روش نوشتن آن هم چندان فرقی نمی کند .
سلام
dgv.rows رو تو wpf نمی بینم چی به جاش اومد؟
سلام و عرض ادب. لطفا از لینک زیر استفاده کنید:
https://help.syncfusion.com/wpf/datagrid/rows
سلام،من میخوام یه سری اطلاعات رو به صورت باکس قابل انتخاب نمایش بدم (مثلا وقتی کاربر طبقه رو انتخاب که کرد لیست اتاق ها به صورت باتوم نمایش داده شود و روی باتوم یه سری اطلاعات مثل شماره اتاق تعداد تخت و هزینه تخت رو نشان دهد و کاربر هر کدام از اتاق ها روخواست انتخاب کرده و مشخصات خود رو جهت رزرو وارد کند ) برای این کار از چه کامپوننتی استفاده کنم ، ایا سمپل دارید ؟؟؟
ممنون
سلام و عرض ادب. پست های آموزش به منظور آموزش روی سایت قرار گرفته تا کاربر با مطالعه و تمرین بتواند پروژه های مختلف خود را طراحی و پیاده سازی کند.
با تشکر از همراهی شما
من میخوام بر اساس این آموزش، اطلاعات رو که با تکست باکس ها وارد گرید ویو کردم رو ذخیره کنم. تا با ری استارت کردن برنامه حذف نشوند، و آن اطلاعاتی که با تکست باکس ها وارد گرید ویو کردم باقی بمانند،باید چیکار کنم؟؟؟؟؟؟
سلام . اطفا بفزمایید این اطلاعاتی که وارد گرید میشه آیا در جایی ذخیره هم میشه ؟ یا با خارج شدن از برنامه و دوباره وارد شدن اطلاعات پاک میشه ؟
سلام خسته نباشید
برای اینکه بخوایم موقع درج رکورد جدید از ورود کد یا داده تکراری جلوگیری کنیم چجوری باید اینکارو کرد؟
مثلا اگر هر داده یک کد منحصر به فرد داشته باشه و کد ها باید غیر تکراری باشند چجوری موقع درج یک رکود جدید اگر اون مد از قبل ثبت شده از ورود مجدد جلوگیری کنیم؟
سلام و عرض ادب. ستون کد را در sql به صورت Primary key تعریف کنید تا کد منحصر به فرد باشد.
با تشکر از همراهی شما
خیلی خوب و روان بود
سلام چیکار میشه کرد که وقتی یه رکوردی رو توی برنامه ثبت کردیم بلافاصله نشون بده لازم نباشه برنامه رو ببندیم و دوباره باز کنیم
سلام و عرض ادب
شما می توانید یک تابع Getlist بنویسید و بعد از هر تغییری که روی دیتابیس انجام دادید این تابع را فراخوانی کنید .
سلام. وقت بخیر
من توی Visual Studio 2019 بعد از اضافه کردن Data GridView ، موقعی که Choose DataSource رو انتخاب میکنم، فقط گزینه None رو میبینم و گزینه Add Project Data Sorce برای اضافه کردن فایل پایگاه داده نمایش داده نمیشه. خواهشمندم راهنمایی کنین.
ممنون
سلام
در دیتا گرید، چطور میتونم از خاصیت سل دابل کلیک فایل های ذخیره شده در دیتابیس رو باز کنم
کدش رو دارید؟؟
سلام با تشکر از من اضافه کردن رکورد کار نکرد
سلام و عرض ادب. تمام کدها تست شده و درست هست. اگر با دقت بیشتر شما مشکل حل نشد اطلاع دهید که به صورت ریموت مشکل شما بررسی شود.
با تشکر از همراهی شما
باسلام و احترام
تشکر از جمع آوری و ارائه مطالب.
سلام عالی بود درج رکورد کار کرد میشه کد های به روزرسانی نمایش ویرایش هم در سایتتان بگذارید خسته نباشید