PDA

View Full Version : فعال یا غیر فعال کردن اطلاع نمایش از دیتابس در سایر datagridview



moory1364
سه شنبه 15 فروردین 1391, 01:55 صبح
با عرض سلام و ادب
می خوام در صورت در دسترس نبودن وسیله نقیله یا ... با استفاده از چک باکس مانع از نمایش در سایر datagridview شود

ممنون میشم کمکم کنید
مثال :

http://up.vbiran.ir/images/5rfua0tza89qkfw7somt.jpg (http://up.vbiran.ir/)

Hybrid
سه شنبه 15 فروردین 1391, 09:53 صبح
سلام راستش منظورت رو خوب متوجه نمیشم ، شما میخواین اون ستون ها رو مخفی کنین ،

میتونین Visible ش رو False کنید تا دیده نشه :

1
DataGridView1.Columns(ColumnName or Column Index).Visible = False





به جای Column name یا Column Index نام ستون یا ایندکس ستون رو وارد کن.

اگه منظورت فرق میکنه بیشتر توضیح بده .

moory1364
سه شنبه 15 فروردین 1391, 12:58 عصر
ببنید ما ی فرم برای وارد کردن اطلاعات خودر وها و دیدن مشخصات کاملش داریم
برخی از خودرو ها فروخته میشند یا از شرکت به کل خارج میشند اما نمی خوایم اطلاعات یا سوابق خودرو از بین بره می خواهم همچین چک باکسی باشه که فقط برای دیدن اطلاعات خودر های فعال شرکت تیک رو خودروهای فعال زده شود و فقط سطرهای که تیک خوردن قابل نمایش و ویرایش باشند سایر datagridview در با تشکر

Hybrid
سه شنبه 15 فروردین 1391, 15:55 عصر
ببنید ما ی فرم برای وارد کردن اطلاعات خودر وها و دیدن مشخصات کاملش داریم
برخی از خودرو ها فروخته میشند یا از شرکت به کل خارج میشند اما نمی خوایم اطلاعات یا سوابق خودرو از بین بره می خواهم همچین چک باکسی باشه که فقط برای دیدن اطلاعات خودر های فعال شرکت تیک رو خودروهای فعال زده شود و فقط سطرهای که تیک خوردن قابل نمایش و ویرایش باشند سایر datagridview در با تشکر

با این روشی که شما گفتین راحت میشه انجام داد ولی به نظر من یک ستون به جدولتون در بانک اصلی اضافه کنید ، که مثلا 2 مقدار True و False رو بگیره ، که مقدار True یعنی فروخته شده یا خارج شده از شرکت و False مثلا یعنی جدید. وقتی که دارین اطلاعات رو واکشی میکنین سطرهایی که مقدار ستونشون برابر False هست رو بیرون بکشین یعنی ماشین های جدید.

moory1364
سه شنبه 15 فروردین 1391, 17:17 عصر
با این روشی که شما گفتین راحت میشه انجام داد ولی به نظر من یک ستون به جدولتون در بانک اصلی اضافه کنید ، که مثلا 2 مقدار True و False رو بگیره ، که مقدار True یعنی فروخته شده یا خارج شده از شرکت و False مثلا یعنی جدید. وقتی که دارین اطلاعات رو واکشی میکنین سطرهایی که مقدار ستونشون برابر False هست رو بیرون بکشین یعنی ماشین های جدید.

بله این تا اینجاش مشخص هستش که میخوام با چک باکس کار True و False رو انجام میده
مشکل من هم اینجاس چه جوری به datagridview های دیگه حالی کنم اگه ستونی به نام مثال : chekbox مقدارش True یا False بود اون سطر قابل نمایش نباشد

headshoter
سه شنبه 15 فروردین 1391, 18:50 عصر
ببین این بدردت میخوره؟
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]);
}

پ.ن : البته اگه موقع خوندن اطلاعات از دیتابیس رکوردهارو فیلتر کنی تو حفظ منابع میتونه کمکت کنه !!

moory1364
سه شنبه 15 فروردین 1391, 19:33 عصر
تشکر headshoter (http://barnamenevis.org/member.php?204239-headshoter) جان جواب گو نشد
از فیلتر کردن اطلاعات استفاده می کنم انگار تنها راه همین هستش

حالا ی سوال : چک باکس رو داخل datagridview چطوری داشته باشم که با تیک زدنش True یا False بره داخل ستون دیتابس

moory1364
سه شنبه 15 فروردین 1391, 22:37 عصر
نوع داده bit در SQL-SERVER
وقتی به گرید بایند کردی در ستون مربوط به فیلد (Column Type) رو بزار DataGridViewCheckBoxColumn این مشکل هم حل شد فقط ی مشکل دیگه من روی datagridview اپشن Edit رو فعال کردم تیک میزنم یا ویرایش رو از طریق datagridview حدول انجام میدمحالا چطوری ذخیره کنم ؟؟؟؟

headshoter
چهارشنبه 16 فروردین 1391, 01:33 صبح
دوباره سلام !
من اون کد رو اصلاح کردم و کد زیر رو نوشتم و ایندفه تست هم کردم !! 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--;
}
}

پ.ن : ولی باز هم به نظرم فیلتر کنی بهتره .

moory1364
چهارشنبه 16 فروردین 1391, 11:22 صبح
سلام
کسی نیست بگه تغییرات اعمال شده ی datagridview رو باید چطور UPDATA یا INSERT کرد

headshoter
چهارشنبه 16 فروردین 1391, 14:26 عصر
سلام
اول بگو ببینم کد دومی که نوشتم جواب داد یا مثه اولیه این هم نشد؟!

دوم اینکه میخوی کل سطرهای دیتاگریدویو رو ببری و دیتابیس رو باهاشون اپدیت کنی (!!!) یا میخوای اخرین سطری که ادیت شده رو ببری اپدیت کنی؟

moory1364
چهارشنبه 16 فروردین 1391, 15:13 عصر
سلام
اول بگو ببینم کد دومی که نوشتم جواب داد یا مثه اولیه این هم نشد؟!

دوم اینکه میخوی کل سطرهای دیتاگریدویو رو ببری و دیتابیس رو باهاشون اپدیت کنی (!!!) یا میخوای اخرین سطری که ادیت شده رو ببری اپدیت کنی؟

این کد شما برای C# هستش من با vb.net نوشتم
از فیلتر استفاده کردم ممنون
نه می خوام چک باکس های که تیک زدم یا تیک نخورده رو ببرم تو فیلتر برای اینک تیک خوردها رو داخل دیتابس ذخیره کنم از طریق datagridview چی کار باید کرد

headshoter
جمعه 18 فروردین 1391, 22:46 عصر
سلام !! ببخشید دیر جواب دادم به کامپیوتر دسترسی نداشتم !
این کد اپدیت هستش !!
اگه توضیح هم نیاز داشتی بگو که برات توضیح بدم .

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

moory1364
جمعه 18 فروردین 1391, 23:50 عصر
تشکر می کنم دوست خوبم با کد شما نتونستم کاری انجام بدم
این کد روهم نوشتم اما مشکلش اینه فقط روی خط آخر عمل می کنه یعنی اگه چک باکس رو تیک بزنی همشون تیک می خوره یا بر عکس
چی کار کنم ردیف های که تیک می زنم عمل کنه هر چند بعد تیک زدن یا تیک روبرداشتند می گه آپدیت شد اما هیچ واکنشی رو برای دیتابس فرستاده نمیشود

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

headshoter
شنبه 19 فروردین 1391, 01:12 صبح
نه باتن نمیخواد !! وقتی ادیت یه سلول توی دیتاگرید تموم میشه این سابروتین اجرا میشه !! ولی منظورت از اینکه اعمال نشد اینه که ارور برمیگردونه یا توی جدول درست ادیت نمیکنه؟؟
اگه حالت دوم اتفاق میافته که اشکال از کوِِِِئری که میفرستی هستش!! (اون قسمت where رو حذف کردی)


.CommandText = "UPDATE tblperson Set per_check = @per_check WHERE ID = @id "



.AddWithValue("@id", Int(DataGridView1.CurrentRow.Cells(0).Value))


این دوتا خط رو درست کن تو کدت .
اگه هم که برنامت ارور بر میگردونه که عکس بذار اینجا که اساتید بیان نظر بدن .

پ.ن : شرمنده !! اطلا حواسم نبود تو تالار وی بی هستم !! واسه همین سی شارپ گذاشتم :دی

moory1364
شنبه 19 فروردین 1391, 01:29 صبح
مهندستشکر می کنم
کد شما به دروستی کار می کنه
اما تغییراتی بر چک باکس که 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

headshoter
شنبه 19 فروردین 1391, 01:45 صبح
خب اگه کد من درست کار کرده پس این همه کده جدید چرا نوشتی اخه ؟:متعجب:
بعد مشکلت که همه رو اپدیت میکنه به خاطر اینه که WHERE نداره کوئریت . بعدشم اگه از پارامتر استفاده کنی بهتره . اگه هم نمیخوای کوئریت باید این باشه :
"UPDATE tblperson Set per_check = 0 WHERE ID = '" & rowID & "' "

moory1364
شنبه 19 فروردین 1391, 02:10 صبح
مهندس می خوام فقط چک باکس ها با تیک خوردن یا تیکشن رو ورداشتم مقدار بگیره اونم با اعداد 0 یا 1

http://up.vbiran.ir/images/zks56zfme1v1mtn7izi.jpg (http://up.vbiran.ir/)

headshoter
شنبه 19 فروردین 1391, 02:26 صبح
خیلی کارای عجیب و غریب انجام میدی :لبخند:
فقط با 0 و 1 باید باشه با True و False نمیشه؟

moory1364
شنبه 19 فروردین 1391, 02:37 صبح
خیلی کارای عجیب و غریب انجام میدی :لبخند:
فقط با 0 و 1 باید باشه با True و False نمیشه؟
چرا اونم میشه :گریه:

headshoter
شنبه 19 فروردین 1391, 04:09 صبح
این دیگه قاعدتا باید کار کنه !! البته اگه با 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

moory1364
شنبه 19 فروردین 1391, 11:21 صبح
http://up.vbiran.ir/images/6vxmde2v1bk0p97u6r6y.png (http://up.vbiran.ir/)

Hybrid
شنبه 19 فروردین 1391, 11:55 صبح
سلام ، این نمونه برنامه رو واست نوشتم کارت رو راه میندازه.توضیحات داخل پروژه داده شده.

moory1364
شنبه 19 فروردین 1391, 12:18 عصر
ممنونم سر کارو من فقط مقدار دهی به چک باکس ها هستش حالا با عدد (0,1) یا (true,false )

http://up.vbiran.ir/images/zks56zfme1v1mtn7izi.jpg (http://up.vbiran.ir/)

در حال حاضر کد خودم داره جواب میده اما مشکلی اصلی من این هستش روی ردیف آخر جواب میده فقط تک تک ردیف هامو نمی تونه 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

Hybrid
شنبه 19 فروردین 1391, 12:31 عصر
دستور sql شما اشکال داره این باعث میشه همه ی سطر ها رو ویرایش کنه باید Where رو هم بهش اضافه کنید.

moory1364
شنبه 19 فروردین 1391, 13:17 عصر
اضافه کردم حالا هیچ عملی انجام نمیده
لطف می کنید برای 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

Hybrid
شنبه 19 فروردین 1391, 13:39 عصر
دوست عزیز ، من داخل Access نوع ستونی که True یا false رو داخلش ذخیره میکنم رو Yes/no تعریف کردم شما در sql میتونین نوع این ستون رو bit در نظر بگیرین ، ویژوال استودیو خودش به صورت اتومات ستون مورد نظر رو به صورت CheckBox نشون میده و میتونین از دستورات مشابهی که واستون نوشتم استفاده کنید

headshoter
شنبه 19 فروردین 1391, 14:08 عصر
خب اون ارور احتمال 99% واسه اینه که شما توی فیلد ID تو اس کیو ال تون سطر اول رو بهش مقدار ندادید !!
رو فیلد ID کلیک راست کن بعد Set as primary key رو بزن براش !! بعدش هم به همه سطرهای ID باید مقدار بدی !! type فیلد ID هم باید int باشه !! امیدوارم جواب بده !!!!!!!

Hybrid
شنبه 19 فروردین 1391, 14:53 عصر
نمونه پروژه قبلی با کد sql (http://uplod.ir/i1l9ropxl1ha/WindowsApplication2.zip.htm)

(( چون حجمش بالای 500 بود مجبور شدم داخل یک سرور دیگه آپلود کنم))

چینی ساز
سه شنبه 28 دی 1395, 12:05 عصر
سلام

من با کد نویسی وی بی دات نت ی دیتاگرید دارم که هنگام لود اطلاعات پیش فرش (4ستون شناسه و نام و نام خانوادگی و نام پدر) رو نشون میده
سه عدد چک باکس هم روی فرم دارم که هر کدوم مربوط به ی ستون هست هنگامی که این سه تا چک باکس تیک دار میکنم به دیتاگرید ستون ها اضافه میشه
ولی وقتی تیک بردارم با اینکه کد تغییر کرده و اون ستون رو سلکت نمی کنه دیتای اون حذف میشه ولی ستون حذف شده در دیتا گرید باقی می مونه البته خالی از دیتا فقط اسم ستون هست
حالت اول
(http://s6.uplod.ir/i/00857/zxfzqd73xtbp.png)http://s6.uplod.ir/i/00857/zxfzqd73xtbp.png

حالت دوم

http://s6.uplod.ir/i/00857/sgfkj6jp73xj.png

چینی ساز
سه شنبه 28 دی 1395, 12:08 عصر
144164144165

چینی ساز
سه شنبه 28 دی 1395, 12:39 عصر
کسی هست راهنمایی کنه