PDA

View Full Version : سوال: کار با DataGridView - پر کردن جدول



xminxmin
شنبه 12 آذر 1390, 11:52 صبح
سلام دوستان
من یه جدول (DataGridView) دارم که مثلا 3 تا ستون داره. (ردیف - نام - نام خانوادگی)
یه جدول هم در دیتابیس دارم بنام TableName که دارای همین سه فیلد هست. (Sql2000)
با استفاده از یه تابع اطلاعات درون بانک رو به داخل جدول فراخوانی می کنم. به این شکل:



...
...
ِDataGridView.DataSource = ds.Tables(tableName)
...
...


اطلاعات وارد گرید میشه اما نه در ستون های خودش. بلکه سه تا ستون اضافه می کنه با نام هایی که در بانک هست. و ستون های خود جدول خالی میمونه.
یعنی سر جمع 6 تا ستون میشه که سه تای اولی خالی هستند.

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

ممنون از اساتید

Hybrid
شنبه 12 آذر 1390, 11:57 صبح
سلام دوست عزیز ... خوب میتونی همون ستون های بانک رو استفاده کنی و فقط نامشون رو تغییر بدی...چرا واسه دیتا گرید ویو ستون اضافه میکنی.؟

موفق باشین.

saeed_sho
شنبه 12 آذر 1390, 12:26 عصر
از این روش استفاده کن
Select Name As [نام] From Tablename
name اسم ستون در دیتابیس و نام هم اون اسمی که میخوای توی دیتاگریدویو نمایش بده
بازم مشکل داشتی بپرس

xminxmin
شنبه 12 آذر 1390, 13:25 عصر
ممنون از اینکه وقت گذاشتید.
اما موضوع به این سادگی ها حل نمیشه. روش شما رو بلد بودم ولی نمی تونم از این روش استفاده کنم.
بزارید توضیح بدم.
من یه فرم "رسید" دارم توی یه برنامه انبارداری و فروش که وقتی Load میشه اطلاعات آخرین رسید توی textbox ها و سایر آیتم ها و همچنین DataGrid نمایش داده میشه.
می توان با کلید های next و prev رکوردها رو عقب و جلو کرد و تک تک نمایش داد.
این یعنی که هر بار گرید باید پاک بشه و اطلاعات جدید رو نمایش بده. تا اینجاش همه چیز خوب و صحیح انجام میشه.
اما امان از وقتی که کلید "جدید" رو میزنی تا رسید جدیدی رو ثبت کنی!!!
نمیشه در گرید چیزی وارد کرد چون میگه "اضافه و یا حدف کردن سطر از گرید غیر ممکن است زیرا ستون ها از نوع DataBound هستند"

اساتید محترم! مشکل اینجاست! گرید Add نمیکنه! نباید ستون های خودش رو که از این نوعه اضافه کنه بابا !
البته میشه با نوشتن کد های زیاد و پر پیچ و خم که استاندارد و حرفه ای هم نیست تک تک فیلد های بانک رو دستی به گرید داد و از DataSource در گرید استفاده نکرد و میشه از 100 تا راه غیرحرفه ای دیگه مثل ایجاد یک DataGrid کمکی و کپی کردن این در آن و ... استفاده کرد ولی من می خوام کوتاه ترین و حرفه ای ترین راه رو برم.

دوستانی که متوجه شدند راهنمایی کنند لطفا. ممنون از همه

xminxmin
یک شنبه 13 آذر 1390, 10:16 صبح
یعنی هیچ کسی این چنین برنامه ای تا حالا ننوشته که جدولی داشته باشه و فیلترش کنه؟!!!

xminxmin
یک شنبه 13 آذر 1390, 18:02 عصر
از اساتید کسی نبود؟!!!:عصبانی++:

xminxmin
چهارشنبه 16 آذر 1390, 09:57 صبح
جالبه ها !!! یعنی برم سراغ راه های طولانی و غیر حرفه ای ؟؟؟:عصبانی++:

saeed_sho
چهارشنبه 16 آذر 1390, 19:25 عصر
منم میخوام جوابشو بدونم

meisam3322
چهارشنبه 16 آذر 1390, 22:13 عصر
با سلام، دوست من از این روش استفاده کن. دیتا گرید رو هم برای ایجاد ستون اتوماتیک غیرفعال کن.



Public Sub Product_View(ByVal _SqlStr As String)

On Error Resume Next

Dim i, j As Int64
If Form1.CtrlProduct1.DataGridView1.RowCount <> 0 Then
For j = 1 To Form1.CtrlProduct1.DataGridView1.Rows.Count
i = Form1.CtrlProduct1.DataGridView1.CurrentRow.Index
Form1.CtrlProduct1.DataGridView1.Rows.RemoveAt(i)
Next
Form1.CtrlProduct1.DataGridView1.Columns.Clear()
End If

Dim facname As New DataGridViewTextBoxColumn
With facname
.Name = "facname"
.DataPropertyName = "facname"
.HeaderText = "کارخانه تولید کننده"
.Width = 280
End With
Form1.CtrlProduct1.DataGridView1.Columns.Add(facna me)

Dim product As New DataGridViewTextBoxColumn
With product
.Name = "product"
.DataPropertyName = "product"
.HeaderText = "نام محصول"
.Width = 260
End With
Form1.CtrlProduct1.DataGridView1.Columns.Add(produ ct)

Dim nickname As New DataGridViewTextBoxColumn
With nickname
.Name = "nickname"
.DataPropertyName = "nickname"
.HeaderText = "نام اختصاری"
.Width = 220
End With
Form1.CtrlProduct1.DataGridView1.Columns.Add(nickn ame)

Dim vol As New DataGridViewTextBoxColumn
With vol
.Name = "vol"
.DataPropertyName = "vol"
.HeaderText = "ابعاد"
.Width = 210
End With
Form1.CtrlProduct1.DataGridView1.Columns.Add(vol)

Con = New OleDbConnection(ConStr)
Con.Open()
DataSet_Product.Clear()
Adapter = New OleDbDataAdapter(_SqlStr, Con)
Adapter.Fill(DataSet_Product, "tblProduct")
Form1.CtrlProduct1.DataGridView1.AutoGenerateColum ns = False
Form1.CtrlProduct1.DataGridView1.DataSource = DataSet_Product.Tables("tblProduct")
Con.Close()

End Sub

roze_abi-r
پنج شنبه 17 آذر 1390, 22:51 عصر
سلام دوستان
من یه جدول (DataGridView) دارم که مثلا 3 تا ستون داره. (ردیف - نام - نام خانوادگی)
یه جدول هم در دیتابیس دارم بنام TableName که دارای همین سه فیلد هست. (Sql2000)
با استفاده از یه تابع اطلاعات درون بانک رو به داخل جدول فراخوانی می کنم. به این شکل:



...
...
ِDataGridView.DataSource = ds.Tables(tableName)
...
...


اطلاعات وارد گرید میشه اما نه در ستون های خودش. بلکه سه تا ستون اضافه می کنه با نام هایی که در بانک هست. و ستون های خود جدول خالی میمونه.
یعنی سر جمع 6 تا ستون میشه که سه تای اولی خالی هستند.

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

ممنون از اساتید


برای اینکه سه تا ستون اضافه نشه این کار رو انجام بدین
شما خاصیت DataPropertyName مربوط به ستونهای DataGridView رو تنظیم بکنین.
یعنی خاصیت DataPropertyName مربوط به هر ستون از DataGridView باید برابر باشه با نام ستون در دیتابیس

باید به قسمت EditCoiumns در DataGridView برید و در پنجره ای که باز میشه در لیست سمت چپ(ُSelected Columns) نام ستون در انتخاب بکنبد ودر لیست سمت راست (Properties) خاصیت DataPropertyName رو برابر نام ستونی از جدول دیتابیس قرار بدین که باید اطلاعات اون ستون از جدول دبتابیس، در ستون DatagridView نمایش داده بشه.
اینطوری دیگه سه تا ستون اضافه نمیشه بلکه اطلاعات مربوط به ستون موجود در جدول دیتابیستون در همون ستون از DataGridView نمایش داده میشه که خاسیت DataPropertyName اون رو همنام ستون دیتابیستون قرار دادین.

bastakboys
پنج شنبه 17 آذر 1390, 23:33 عصر
برای اینکه سه تا ستون اضافه نشه این کار رو انجام بدین
شما خاصیت DataPropertyName مربوط به ستونهای DataGridView رو تنظیم بکنین.
یعنی خاصیت DataPropertyName مربوط به هر ستون از DataGridView باید برابر باشه با نام ستون در دیتابیس

باید به قسمت EditCoiumns در DataGridView برید و در پنجره ای که باز میشه در لیست سمت چپ(ُSelected Columns) نام ستون در انتخاب بکنبد ودر لیست سمت راست (Properties) خاصیت DataPropertyName رو برابر نام ستونی از جدول دیتابیس قرار بدین که باید اطلاعات اون ستون از جدول دبتابیس، در ستون DatagridView نمایش داده بشه.
اینطوری دیگه سه تا ستون اضافه نمیشه بلکه اطلاعات مربوط به ستون موجود در جدول دیتابیستون در همون ستون از DataGridView نمایش داده میشه که خاسیت DataPropertyName اون رو همنام ستون دیتابیستون قرار دادین.
روش دوستمون تست شد و درسته

xminxmin
شنبه 19 آذر 1390, 18:54 عصر
ممنون از راهنمایی
برم امتحان کنم ببینم میشه! ولی از ظاهر قضیه انگار که شدنیه. ممنون

hosseinarefi
یک شنبه 11 دی 1390, 01:01 صبح
سلام
روش دوستمون درسته فقط تو کوری که می نویسم فقط فیلد هایی رو که می خواهیم نمایش بدیم و توDataGridView در قسمت DataPropertyName فیلد انتخابی رو معرفی کردی بنویسید.
اگه تو کوریمون فیلد اضافی بنویسد یا از from* استفاده کنی به فیلدی که برای نمایش احتیاج نداری مثل id رو هم نمایش میده.