سلام راستش منظورت رو خوب متوجه نمیشم ، شما میخواین اون ستون ها رو مخفی کنین ،
میتونین Visible ش رو False کنید تا دیده نشه :
1
DataGridView1.Columns(ColumnName or Column Index).Visible = False
به جای Column name یا Column Index نام ستون یا ایندکس ستون رو وارد کن.
اگه منظورت فرق میکنه بیشتر توضیح بده .
ببنید ما ی فرم برای وارد کردن اطلاعات خودر وها و دیدن مشخصات کاملش داریم
برخی از خودرو ها فروخته میشند یا از شرکت به کل خارج میشند اما نمی خوایم اطلاعات یا سوابق خودرو از بین بره می خواهم همچین چک باکسی باشه که فقط برای دیدن اطلاعات خودر های فعال شرکت تیک رو خودروهای فعال زده شود و فقط سطرهای که تیک خوردن قابل نمایش و ویرایش باشند سایر datagridview در با تشکر
با این روشی که شما گفتین راحت میشه انجام داد ولی به نظر من یک ستون به جدولتون در بانک اصلی اضافه کنید ، که مثلا 2 مقدار True و False رو بگیره ، که مقدار True یعنی فروخته شده یا خارج شده از شرکت و False مثلا یعنی جدید. وقتی که دارین اطلاعات رو واکشی میکنین سطرهایی که مقدار ستونشون برابر False هست رو بیرون بکشین یعنی ماشین های جدید.
ببین این بدردت میخوره؟
for (int i = 0; (i < dataGridView1.Rows.Count - 1); i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["دسترسی"].Value) == false)
dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
}
پ.ن : البته اگه موقع خوندن اطلاعات از دیتابیس رکوردهارو فیلتر کنی تو حفظ منابع میتونه کمکت کنه !!
تشکر headshoter جان جواب گو نشد
از فیلتر کردن اطلاعات استفاده می کنم انگار تنها راه همین هستش
حالا ی سوال : چک باکس رو داخل datagridview چطوری داشته باشم که با تیک زدنش True یا False بره داخل ستون دیتابس
آخرین ویرایش به وسیله moory1364 : سه شنبه 15 فروردین 1391 در 21:21 عصر
این مشکل هم حل شد فقط ی مشکل دیگه من روی datagridview اپشن Edit رو فعال کردم تیک میزنم یا ویرایش رو از طریق datagridview حدول انجام میدمحالا چطوری ذخیره کنم ؟؟؟؟نوع داده bit در SQL-SERVER
وقتی به گرید بایند کردی در ستون مربوط به فیلد (Column Type) رو بزار DataGridViewCheckBoxColumn
آخرین ویرایش به وسیله moory1364 : چهارشنبه 16 فروردین 1391 در 00:39 صبح
دوباره سلام !
من اون کد رو اصلاح کردم و کد زیر رو نوشتم و ایندفه تست هم کردم !! 100% باید برای شما هم جواب بده !!
فقط به جای "دسترسی" ایندکس ستون دسترسی رو بزار
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["دسترسی"].Value) == false)
{
dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
i--;
}
}
پ.ن : ولی باز هم به نظرم فیلتر کنی بهتره .
آخرین ویرایش به وسیله headshoter : چهارشنبه 16 فروردین 1391 در 15:18 عصر
سلام
کسی نیست بگه تغییرات اعمال شده ی datagridview رو باید چطور UPDATA یا INSERT کرد
سلام
اول بگو ببینم کد دومی که نوشتم جواب داد یا مثه اولیه این هم نشد؟!
دوم اینکه میخوی کل سطرهای دیتاگریدویو رو ببری و دیتابیس رو باهاشون اپدیت کنی (!!!) یا میخوای اخرین سطری که ادیت شده رو ببری اپدیت کنی؟
سلام !! ببخشید دیر جواب دادم به کامپیوتر دسترسی نداشتم !
این کد اپدیت هستش !!
اگه توضیح هم نیاز داشتی بگو که برات توضیح بدم .
Private Sub DataGridView1_CellEndEdit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellEndEdit
Dim cmd As New SqlCommand
Dim cnn As New SqlConnection
cnn.ConnectionString = "Data Source=.;Initial Catalog=Spec;Integrated Security=True"
With cmd
.Connection = cnn
.CommandText = "UPDATE Test Set Firstname = @fname, Lastname = @lname, Can = @Can Where ID = @id"
If (cnn.State = ConnectionState.Closed) Then
cnn.Open()
End If
With .Parameters
.Clear()
.AddWithValue("@fname", DataGridView1.CurrentRow.Cells(1).Value.ToString() )
.AddWithValue("@lname", DataGridView1.CurrentRow.Cells(2).Value.ToString() )
.AddWithValue("@Can", Convert.ToBoolean(DataGridView1.CurrentRow.Cells(3 ).Value))
.AddWithValue("@id", Int(DataGridView1.CurrentRow.Cells(0).Value))
End With
.ExecuteNonQuery()
End With
cnn.Close()
End Sub
تشکر می کنم دوست خوبم با کد شما نتونستم کاری انجام بدم
این کد روهم نوشتم اما مشکلش اینه فقط روی خط آخر عمل می کنه یعنی اگه چک باکس رو تیک بزنی همشون تیک می خوره یا بر عکس
چی کار کنم ردیف های که تیک می زنم عمل کنه هر چند بعد تیک زدن یا تیک روبرداشتند می گه آپدیت شد اما هیچ واکنشی رو برای دیتابس فرستاده نمیشود
Private Sub DataGridView1_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellEndEdit
Dim command As New SqlClient.SqlCommand
Dim connection As New SqlClient.SqlConnection
Dim adaptor As New SqlClient.SqlDataAdapter
Dim db As New DB
connection.ConnectionString = ("Data Source=" & My.Computer.Name & ";Initial Catalog=moory;Integrated Security=True")
Dim con = connection.ConnectionString
Dim sql As String
Try
connection.Open()
If CBool(Me.DataGridView1.CurrentRow.Cells(7).Value) = True Then
sql = "UPDATE tblperson SET per_chek = 1 "
Dim cmd As New SqlCommand(sql, connection)
cmd.ExecuteNonQuery()
Else
sql = "UPDATE tblperson SET per_chek = 0 "
Dim cmd As New SqlCommand(sql, connection)
cmd.ExecuteNonQuery()
End If
MsgBox("Updated")
connection.Close()
Catch
End Try
End Sub
آخرین ویرایش به وسیله moory1364 : شنبه 19 فروردین 1391 در 02:05 صبح
نه باتن نمیخواد !! وقتی ادیت یه سلول توی دیتاگرید تموم میشه این سابروتین اجرا میشه !! ولی منظورت از اینکه اعمال نشد اینه که ارور برمیگردونه یا توی جدول درست ادیت نمیکنه؟؟
اگه حالت دوم اتفاق میافته که اشکال از کوِِِِئری که میفرستی هستش!! (اون قسمت where رو حذف کردی)
.CommandText = "UPDATE tblperson Set per_check = @per_check WHERE ID = @id "
.AddWithValue("@id", Int(DataGridView1.CurrentRow.Cells(0).Value))
این دوتا خط رو درست کن تو کدت .
اگه هم که برنامت ارور بر میگردونه که عکس بذار اینجا که اساتید بیان نظر بدن .
پ.ن : شرمنده !! اطلا حواسم نبود تو تالار وی بی هستم !! واسه همین سی شارپ گذاشتم :دی
مهندستشکر می کنم
کد شما به دروستی کار می کنه
اما تغییراتی بر چک باکس که bit می باشد اعمال نمی کنه یعنی باید عدد 0 برای غیر فعال یا 1 برای فعال بودن رو ارسال کند که انجام نمی دهد
ارور نمیده فقط روی ردیف آخر تغییر اعمال می شند که متاسفانه برای تمامی چک باکس های اون ستون اعمال می شود
با این کد اصلاً کار نکرد
Dim i As Integer = 0
Try
connection.Open()
For i = 0 To Me.DataGridView1.RowCount - 1
Dim rowID = Me.DataGridView1.Rows(i).Cells(0).Value
If CBool(Me.DataGridView1.Rows(i).Cells(7).Value) = True Then
sql = "UPDATE tblperson SET per_chek = 1 ID = '" & rowID & "' """
Dim cmd As New SqlCommand(sql, connection)
cmd.ExecuteNonQuery()
Else
sql = "UPDATE tblperson SET per_chek = 0 ID = '" & rowID & "' """
Dim cmd As New SqlCommand(sql, connection)
cmd.ExecuteNonQuery()
End If
Next
MsgBox("Updated")
connection.Close()
Catch
End Try
خب اگه کد من درست کار کرده پس این همه کده جدید چرا نوشتی اخه ؟
بعد مشکلت که همه رو اپدیت میکنه به خاطر اینه که WHERE نداره کوئریت . بعدشم اگه از پارامتر استفاده کنی بهتره . اگه هم نمیخوای کوئریت باید این باشه :
"UPDATE tblperson Set per_check = 0 WHERE ID = '" & rowID & "' "
آخرین ویرایش به وسیله headshoter : شنبه 19 فروردین 1391 در 03:10 صبح
خیلی کارای عجیب و غریب انجام میدی
فقط با 0 و 1 باید باشه با True و False نمیشه؟
این دیگه قاعدتا باید کار کنه !! البته اگه با 10 تا خط کد دیگه قاطی نشه !!!!!!!
Private Sub DataGridView1_CellEndEdit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellEndEdit
Dim cmd As New SqlCommand
Dim cnn As New SqlConnection
cnn.ConnectionString = "Data Source=" & My.Computer.Name & ";Initial Catalog=moory;Integrated Security=True"
With cmd
.Connection = cnn
.CommandText = "UPDATE tblperson Set per_chek= @chbox Where ID = @id"
If (cnn.State = ConnectionState.Closed) Then
cnn.Open()
End If
With .Parameters
.Clear()
.AddWithValue("@chbox", Convert.ToBoolean(DataGridView1.CurrentRow.Cells(7 ).Value))
.AddWithValue("@id", Int(DataGridView1.CurrentRow.Cells(0).Value))
End With
.ExecuteNonQuery()
End With
cnn.Close()
End Sub
سلام ، این نمونه برنامه رو واست نوشتم کارت رو راه میندازه.توضیحات داخل پروژه داده شده.
ممنونم سر کارو من فقط مقدار دهی به چک باکس ها هستش حالا با عدد (0,1) یا (true,false )
در حال حاضر کد خودم داره جواب میده اما مشکلی اصلی من این هستش روی ردیف آخر جواب میده فقط تک تک ردیف هامو نمی تونه update کنه
باگ کد هم اینه با تیک خوردن یا نخوردن چک باکس ستون آخر همه رو با مقدار اون مقدار دهی می کنه
Private Sub DataGridView1_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
Handles DataGridView1.CellEndEdit
Dim command As New SqlClient.SqlCommand
Dim connection As New SqlClient.SqlConnection
Dim adaptor As New SqlClient.SqlDataAdapter
Dim db As New DB
connection.ConnectionString = ("Data Source=" & My.Computer.Name & ";Initial Catalog=moory;Integrated Security=True")
Dim con = connection.ConnectionString
Dim sql As String
Try
connection.Open()
If CBool(Me.DataGridView1.CurrentRow.Cells(7).Value) = True Then
sql = "UPDATE tblperson SET per_chek = 1 "
Dim cmd As New SqlCommand(sql, connection)
cmd.ExecuteNonQuery()
Else
sql = "UPDATE tblperson SET per_chek = 0 "
Dim cmd As New SqlCommand(sql, connection)
cmd.ExecuteNonQuery()
End If
MsgBox("Updated")
connection.Close()
Catch
End Try
End Sub
دستور sql شما اشکال داره این باعث میشه همه ی سطر ها رو ویرایش کنه باید Where رو هم بهش اضافه کنید.
اضافه کردم حالا هیچ عملی انجام نمیده
لطف می کنید برای sql نمونه کار بدید گیج شدم این چند روز انقدر کد دیدم
Try
connection.Open()
For i = 0 To Me.DataGridView1.RowCount - 1
Dim rowID = Me.DataGridView1.Rows(i).Cells(0).Value
If CBool(Me.DataGridView1.CurrentRow.Cells(7).Value) = True Then
sql = "UPDATE tblperson SET per_chek = 1 WHERE ID = '" & rowID & "' """
Dim cmd As New SqlCommand(sql, connection)
cmd.ExecuteNonQuery()
Else
sql = "UPDATE tblperson SET per_chek = 0 WHERE ID = '" & rowID & "' """
Dim cmd As New SqlCommand(sql, connection)
cmd.ExecuteNonQuery()
End If
Next
MsgBox("Updated")
connection.Close()
Catch
End Try
دوست عزیز ، من داخل Access نوع ستونی که True یا false رو داخلش ذخیره میکنم رو Yes/no تعریف کردم شما در sql میتونین نوع این ستون رو bit در نظر بگیرین ، ویژوال استودیو خودش به صورت اتومات ستون مورد نظر رو به صورت CheckBox نشون میده و میتونین از دستورات مشابهی که واستون نوشتم استفاده کنید
خب اون ارور احتمال 99% واسه اینه که شما توی فیلد ID تو اس کیو ال تون سطر اول رو بهش مقدار ندادید !!
رو فیلد ID کلیک راست کن بعد Set as primary key رو بزن براش !! بعدش هم به همه سطرهای ID باید مقدار بدی !! type فیلد ID هم باید int باشه !! امیدوارم جواب بده !!!!!!!
نمونه پروژه قبلی با کد sql
(( چون حجمش بالای 500 بود مجبور شدم داخل یک سرور دیگه آپلود کنم))
سلام
من با کد نویسی وی بی دات نت ی دیتاگرید دارم که هنگام لود اطلاعات پیش فرش (4ستون شناسه و نام و نام خانوادگی و نام پدر) رو نشون میده
سه عدد چک باکس هم روی فرم دارم که هر کدوم مربوط به ی ستون هست هنگامی که این سه تا چک باکس تیک دار میکنم به دیتاگرید ستون ها اضافه میشه
ولی وقتی تیک بردارم با اینکه کد تغییر کرده و اون ستون رو سلکت نمی کنه دیتای اون حذف میشه ولی ستون حذف شده در دیتا گرید باقی می مونه البته خالی از دیتا فقط اسم ستون هست
حالت اول
http://s6.uplod.ir/i/00857/zxfzqd73xtbp.png
حالت دوم
http://s6.uplod.ir/i/00857/sgfkj6jp73xj.png
کسی هست راهنمایی کنه