PDA

View Full Version : سوال: پر کردن datagridview از بانک



راحیل مهربان
جمعه 19 تیر 1394, 15:36 عصر
سلام
وقت بخیر و طاعات قبول

-----------------------------------

دوستان برای برنامم از یک دیتاگریدویو استفاده کردم. برای این گریدویو چند تا ستون که میخوام از بانک پر بشه تعریف کردم بعلاوه دو ستون برای ویرایش و حذف از نوع DataGridViewImageColumn
اولین مشکلی که پیدا کردم اینه که : وقتی دیتاست رو به گرید بایند میکنم. هم ستون هایی که خودم تعریف کردم رو پر میکنه و هم دیتاست رو به گریدم اضافه میکنه. یعنی هر فیلدی دوبار نمایش داده میشه. یه بار به اسم خودش در بانک و یه بار هم به اسمی که من براش تو گرید مشخص کردم.
مشکل دیگم زمانیه که وقتی یه رکورد به گرید اضافه میکنم و پشت سرش گرید رو رفرش میکنم خطا میده.
خطاش رو براتون میفرستم. ممنون میشم راهنمایی کنید. (احساس میکنم مربوط به ویرایش و حذفه)

133115
-------------------------------------
پ.ن : خیلی گشتم که تاپیک جدید نزنم ولی متاسفانه جوابی نگرفتم....

systam
جمعه 19 تیر 1394, 15:42 عصر
اولین مشکلی که پیدا کردم اینه که : وقتی دیتاست رو به گرید بایند میکنم. هم ستون هایی که خودم تعریف کردم رو پر میکنه و هم دیتاست رو به گریدم اضافه میکنه. یعنی هر فیلدی دوبار نمایش داده میشه. یه بار به اسم خودش در بانک و یه بار هم به اسمی که من براش تو گرید مشخص کردم.

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


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

توی خطا خط اون میکه یه مقدار ازنوع system.int32 رو داری میفرستی به systam.drawing.image
کد ها رو بزار بهتره میشه راهنمایی کرد دوستان

راحیل مهربان
دوشنبه 22 تیر 1394, 00:09 صبح
نیازی به تعریف ستون توسط خودت نیست
اگر مایل به این کار هستی ستون های رو که میسازی رو مقدار دهی کن برای همین که هر ستونی رو وبار نمایش میده
هر ستون رو که میسازم مقدار دهی کنم منظورتون چیه؟ یعنی تو یه حلقه خودم مقدار بدم. من همش فکر میکردم باید یه کدی باشه که مشخص کنم هر کدوم از ستون های گریدم با کدوم ستون جدولم مرتبطه. این مسئله رو هم فقط اونطوری که کد زدم پیدا کردم. ممنون میشم راهنمایی کنید.


توی خطا خط اون میکه یه مقدار ازنوع system.int32 رو داری میفرستی به systam.drawing.image
کد ها رو بزار بهتره میشه راهنمایی کرد دوستان

مسئله اینجاست که من نمیفهمم این خطا رو از کدوم قسمت میده؟ تو بانکم هیچ image ای ذخیره نمی کنم. فقط دو تا ستون از نوع DataGridViewImageColumn دارم.
این هم کد:



OrgClass Org = new OrgClass();
DataSet ds_Org = Org.SelectForOrg();
if (ds_Org != null && ds_Org.Tables[0].Rows.Count != 0)
{
flgrd_Organization.DataSource = ds_Org.Tables[0];
flgrd_Organization.Columns[0].DataPropertyName = "ID";
flgrd_Organization.Columns[1].DataPropertyName = "ParentId";
flgrd_Organization.Columns[2].DataPropertyName = "Organization";
flgrd_Organization.Columns[3].DataPropertyName = "CreateDate";
}

systam
سه شنبه 23 تیر 1394, 14:57 عصر
سلام دوست عزیز
برای پر کردن دستی گرید ویو طبق عکسی که گذاشتم
133232
1 - در کادر smart tag گاید کرده
2 - به قسمن edit columes رقته
3 - بعد اضافه کردن ستونها طبق فیلد های جدول
4 - و در قسمت data property name نلم فیلد موجود در بانک رو مینویسیم

و کد نویسیشم به این صورت چون من خودم با vb کار میکنم کد رو تبدیلش کردم
C#‎‎‎‎‎:
DataTable dt = new DataTable(); DataSet ds = new DataSet();
SqlDataAdapter dta = new SqlDataAdapter("select * from Table1", "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\bin\\Debug\\Database1.mdf;Integrated Security=True;User Instance=True");
dta.Fill(ds, "Table1");
DataGridView1.DataSource = ds;
DataGridView1.DataMember = "Table1";
vb :
Dim dt As New DataTable Dim ds As New DataSet
Dim dta As New SqlDataAdapter("select * from Table1", "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\bin\Debug\Database1.mdf;Integrated Security=True;User Instance=True")
dta.Fill(ds, "Table1")
DataGridView1.DataSource = ds
DataGridView1.DataMember = "Table1"

133239
سورس هم ضمیمه شد .

موفق باشید.

راحیل مهربان
دوشنبه 12 مرداد 1394, 23:34 عصر
سلام دوباره
---------------------------
چند تا سوال دیگه داشتم:
1) میتونم یک ستون در خود گریدویو ایجاد کنم به عنوان ردیف؟ مثلا اگر گریدویو با 10 سطر پر میشه ، خودکار یک تا ده رو برای هر سطر نمایش بده.
2) همونطور که گفتم از 2 تا ستون DataGridViewImageColumn برای حذف و ویرایش دارم استفاده میکنم. منتهی نمیدونم وقتی که کاربر روی ویرایش یا حذف کلیک میکنه چطور میتونم به اطلاعات اون سطر دسترسی پیدا کنم تا بتونم عملیات حذف و ویرایش رو انجام بدم.

davidrobert
سه شنبه 13 مرداد 1394, 10:12 صبح
سلام دوباره
---------------------------
چند تا سوال دیگه داشتم:
1) میتونم یک ستون در خود گریدویو ایجاد کنم به عنوان ردیف؟ مثلا اگر گریدویو با 10 سطر پر میشه ، خودکار یک تا ده رو برای هر سطر نمایش بده.
2) همونطور که گفتم از 2 تا ستون DataGridViewImageColumn برای حذف و ویرایش دارم استفاده میکنم. منتهی نمیدونم وقتی که کاربر روی ویرایش یا حذف کلیک میکنه چطور میتونم به اطلاعات اون سطر دسترسی پیدا کنم تا بتونم عملیات حذف و ویرایش رو انجام بدم.

بفرمائید این هم همون چیزی که میخواهی ردیف بندی در خود گرید ویو http://barnamenevis.org/showthread.php?501439-%D8%B4%D9%85%D8%A7%D8%B1%D9%87-%D8%B1%D8%AF%DB%8C%D9%81-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF%D 9%88%DB%8C%D9%88

راحیل مهربان
پنج شنبه 15 مرداد 1394, 23:25 عصر
سوال دومم بی جواب مونده بود که با سرچی که خودم زدم به یه تیکه کد رسیدم. مشکلم تقریبا حل شده. فقط یه اشکال کوچیک مونده.
اول کد رو میزارم که اگه دوست دیگه هم این اشکال رو داشت بتونه همینجا حلش کنه.

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

کاری که میخواستم انجام بدم این بود که وقتی به ازای هر رکورد، کاربر " ویرایش " یا " حذف " رو میزنه، عملیات مربوط به اون رکورد انجام بشه. یعنی با زدن حذف اون رکورد حذف بشه و با زدن ویرایش اطلاعات اون رکورد رو در فیلدهای مربوطش نشون بده و بعد از اعمال تغییرات و زدن دکمه ثبت ویرایش انجام بشه.
کدی که من پیدا کردم این هستش :


private void datagridview1_SelectionChanged(object sender, EventArgs e)
{
if (datagridview1.SelectedCells.Count > 0)
{
int selectedrowindex = datagridview1.SelectedCells[0].RowIndex;

DataGridViewRow selectedRow = datagridview1.Rows[selectedrowindex];

string a = Convert.ToString(selectedRow.Cells["you have to mention you cell corresponding column name"].Value);


}
}


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


پ . ن : لینک کد بالا :
http://stackoverflow.com/questions/7657137/datagridview-full-row-selection-but-get-single-cell-value

راحیل مهربان
پنج شنبه 15 مرداد 1394, 23:47 عصر
دو تا سوال دارم دوستان :

1- اگه عکسی که تو پاسخ قبلی گذاشتم نگاه کنید. سلول اول (ویرایش) به حالت انتخاب شده هست. در واقع من نمیخوام موقع لود فرم هیچ سطر یا ستون یا سلولی به حالت انتخاب شده باشه.
خصوصیت SelectionMode گریدم رو برابر با CellSelect قرار دادم. وقتی فرم لود میشه اولین سلول اولین سطر به حالت انتخاب هست و خب از اونجایی که من میخوام موقع انتخاب شدن سلول (مثلا همین ویرایش) کدهای مربوط به ویرایش اجرا بشه ، همون بار اول که فرم لود میشه و کاربر هیچی انتخاب نکرده، کدهای مربوط به ویرایش فراخوانی میشه.

2- من دوست داشتم گریدم رو طوری طراحی کنم که ستون ویرایش و حذف بیفته انتهای گریدم. هرچقدر گشتم نتونستم تنظیم مربوطش رو پیدا کنم. دوستان اگه بهم بگن چطور میتونم اینکارو انجام بدم ممنون میشم.

راحیل مهربان
جمعه 16 مرداد 1394, 18:59 عصر
واقعا کسی جواب این سوالا رو نمیدونه؟؟؟؟!!!!
یا حوصله نمیکنه و جواب نمیده؟؟؟!!!!!!

alireza264
شنبه 17 مرداد 1394, 00:01 صبح
سلام
برای سوال اول موقع فرم لود روی یک کنترل دیگه فوکوس کن
سوال ذوم
با استفاده از Add columns سه ستون ار نوع DataGridViewLinkColumn و یا DataGridViewButtonColumn تعریف کن ( من اولی رو ترجیح میدم)
134009

بعد تظیماتشو انجام بده
134010

حالا در قسمت کد میتونی سایر ستونها رو که از ستون 3 شروع میشن رو تعریف کنی


System.Data.DataTable table = new DataTable();
da.SelectCommand = GetSelectCommand(Sel_Class);

da.Fill(table);

this.dataGridView1.DataSource = table;
// this.dataGridView1.Sort(this.dataGridView1.Columns[8], ListSortDirection.Ascending);

this.dataGridView1.Columns[3].HeaderText = "ميانگين نمره";
this.dataGridView1.Columns[3].ToolTipText = "ميانگين نمره";
this.dataGridView1.Columns[3].Width = 100;

this.dataGridView1.Columns[4].HeaderText = "تعداد هنرجو";
this.dataGridView1.Columns[4].ToolTipText = "تعداد هنرجو";
this.dataGridView1.Columns[4].Width = 90;

/* this.dataGridView1.Columns[5].HeaderText = "تـعـداد کـلاس";
this.dataGridView1.Columns[5].ToolTipText = "تـعـداد کـلاس";
this.dataGridView1.Columns[5].Width = 200;*/

this.dataGridView1.Columns[5].HeaderText = "درس";
this.dataGridView1.Columns[5].ToolTipText = "درس";
this.dataGridView1.Columns[5].Width = 150;


this.dataGridView1.Columns[6].HeaderText = "نــام کـلاس";
this.dataGridView1.Columns[6].ToolTipText = "نــام کـلاس";
this.dataGridView1.Columns[6].Width = 150;


this.dataGridView1.Columns[7].HeaderText = "تــرم";
this.dataGridView1.Columns[7].ToolTipText = "تــرم";
this.dataGridView1.Columns[7].Width = 70;

this.dataGridView1.Columns[8].HeaderText = "رشــتــه";
this.dataGridView1.Columns[8].ToolTipText = "رشــتــه کـلاس";
this.dataGridView1.Columns[8].Width = 80;