# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > VB.NET > آموزش: آموزش کار با دیتاگرید

## barbodsoft.com

سلام
تعداد زیادی از تاپیکها در مورد دیتاگرید ایجاد می شود و اکثرا هم تکراری هست. برای همین یک تاپیک جدید ایجاد کردم و سعی می کنم جوانب مختلف کار با دیتاگرید رو براتون توضیح بدم. دوستان اگه سوالی دارید اینجا بپرسید در خدمتم.

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

((((((BarbodSoft.com))))))

پست 2: ذخیره اطلاعات دیتاگرید ویو در دیتابیس و نمایش در دیتاگرید به همراه مثالی ساده
پست 4 : آموزش پرینت از دیتاگرید ویو
پست 6 : برخی محاسبات روی سلول های دیتاگرید
پست 9 : نمونه کوچکی از فاکتور
پست 11: کلید اینتر به جای tab
پست 12 : نمایش محتویات یک سلول در tootip  به هنگام کلیک کردن.
پست 15 : یک خط در میون رنگی کردن - یک خطه کردن هدر ستون ها
پست 19 , 17 : استفاده از combobox در دیتاگرید. و عمل جستجو با توجه به گزینه انتخابی در combobox
پست 20 : ریختن همه اطلاعات دیتاگرید در آرایه 
پست 23:قفل کردن یک سلول براساس مقدار سلول دیگر 
پست 24 : چطور میشه ترتیب نمایش ستون ها رو در دیتاگریدویو تغییر داد؟
پست 26 : تغییر رنگ یک ستون از دیتا گرید ویو
پست 29 : تغییر حالت انتخاب(selection) از انتخاب سلول ، ستون ، سطر 
پست 32 :حذف و اضافه یک سطر
پست 42 : حذف یک سطر از طریق کلیک کردن روی همان سطر (می تونید یک ستون با نام حذف داشته باشید و کاربر روی آن کلیک کند)
 پست 43 : کنترل ورودی دیتاگرید

----------


## barbodsoft.com

مثالی بسیار ساده برای شروع کار با دیتاگرید ویو

----------


## s.k711

سلام ،خسته نباشيد.
اگه ميشه لطف كنيد بفرماييد چه جوري از ديتاگريد پرينت ميشه گرفت؟
البته من يك كد تو اين سايت پيدا كردم اما صفحه چاپ برعكس چاپ ميشه، من ميخوام اول شماره رديف بعد موضوع و ... باشه اما شماره رديف آخرين ستون تو گريدمه.

----------


## barbodsoft.com

یک پروژه ضمیمه کردم. امیدوارم کارت راه بندازه.

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


البته یک روش ساده تر هم وجود داره که دیتاگرید رو به عنوان یک تصویر چاپ می کنه . مثلما در این روش فقط اطلاعاتی که در حال دیدن هستید چاپ می شه و اطلاعاتی باید اسکرول بشه چاپ نخواهد شد.
این هم کد روش دوم

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'print bitmap
        PrintDialog1.ShowDialog()
        PrintDocument1.Print()
    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim bm As New Bitmap(Me.DataGridView1.Width, Me.DataGridView1.Height)
        DataGridView1.DrawToBitmap(bm, New Rectangle(0, 0, Me.DataGridView1.Width, Me.DataGridView1.Height))
        e.Graphics.DrawImage(bm, 0, 0)
    End Sub


یک روش دیگر هم که یکی از دوستان توضیح داده رو می تونید از لینک زیر ببینید که محتویات چاپ می شه نه عکس
https://barnamenevis.org/showthread.p...B1%DB%8C%D8%AF

----------


## oliya24

دوست عزیز ای پروژه خطا داره میشه بر طرفش کنی به من خطای con رو میده مشکلش چیه

----------


## barbodsoft.com

برخی محاسبات روی سلول های دیتاگرید


Public Class Form1

    Private Sub DataGridView1_CellLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
        sumave()
    End Sub

    Private Sub DataGridView1_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
        sumave()
    End Sub

    Sub sumave()
        Dim sumo, summ As Double
        For i = 0 To DataGridView1.RowCount - 2
            sumo += DataGridView1.Item("olom", i).Value
            summ += DataGridView1.Item("math", i).Value
        Next
        TxtSumOlom.Text = sumo
        TXTSumMath.Text = summ
        TxtAvregeOlom.Text = sumo / (DataGridView1.RowCount - 1)
        TXTAvergeMath.Text = summ / (DataGridView1.RowCount - 1)
    End Sub
End Class

----------


## barbodsoft.com

> دوست عزیز ای پروژه خطا داره میشه بر طرفش کنی به من خطای con رو میده مشکلش چیه


به خاطر دیتابیسش هست. شما باید کانکشن رو مطابق با سیستم خودت تغییر بدی. البته من یک کانکشنی قرار دادم که در اکثر سیستم ها جواب بده.

----------


## mina.org58

سلام
ممنون که راهنمایی می کنید.
اگه بخواهیم ستون تعداد ضربدر قیمت بشه و قیمت کل در ستون بعدی قرار بگیره باید چیکار کنم.

----------


## barbodsoft.com

نمونه کوچکی از فاکتور در پاسخ به پست 8



Public Class Form1

    Private Sub DataGridView1_CellLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
        sumave()
    End Sub

    Private Sub DataGridView1_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
        sumave()
    End Sub

    Sub sumave()
        Dim Tedad, Ghimat, SumGhimat As Double
        For i = 0 To DataGridView1.RowCount - 2
            Tedad = DataGridView1.Item("tedad", i).Value
            Ghimat = DataGridView1.Item("ghimat", i).Value
            DataGridView1.Item("kol", i).Value = Ghimat * Tedad
            SumGhimat += Ghimat * Tedad
        Next
        TxtSumOlom.Text = SumGhimat

    End Sub
End Class

----------


## ehsan_g

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

----------


## barbodsoft.com

در پاسخ به پست 10: کلید اینتر به جای tab

یک کلاس به نام mydg به برنام ات اضافه کن و کد ش رو پاک کن و بجاش کد زیر رو بنویس. بعد برنامه رو run کن و دوباره ببند. حالا اگه بری تو toolbox نگاه کنی یک کامپننت به نام mydg  اضافه شده. از اون کامپوننت به جای دیتاگرید استفاده کن. درست می شه.


Public Class MyDg
    Inherits DataGridView
    Public Event OtherKeys(ByVal keys As System.Windows.Forms.Keys)
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
        Select Case (keyData)
            Case Keys.Enter
                Return MyBase.ProcessTabKey(Keys.Tab)
            Case Else
                Return MyBase.ProcessCmdKey(msg, keyData)
        End Select

    End Function
End Class

----------


## barbodsoft.com

نمایش محتویات یک سلول در tootip  به هنگام کلیک کردن.

کد زیر رو تو رویداد کلیک دیتاگرید تون بنویسید

                Dim totip As New ToolTip
        Dim _X As Integer = DataGridView1.Location.X + ((e.ColumnIndex + 1) * 100)
        Dim _Y As Integer = DataGridView1.Location.Y + ((e.RowIndex + 2) * 20)
        totip.Show(DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value, Me, _X, _Y, 1000)


عدد 20 و 100 به ترتیب ارتفاع سطر و عرض ستون هست. شما می تونید مقدار رو جایگزین کنید.

----------


## ehsan_g

دوست عزيز باربد ضمن تشكر اززحمات شما ميشه لطف كنيد وادامه آموزش گريد رابديد
اگه ميشه كامبوباكس در گريد را توضيح بديد كه يك كد رو بگيره اطلاعات ديگه رو تو سلوله ثبت كنه 
باتشكر

----------


## bhasoft

با سلام خدمت باربدسافت عزيز.
خسته نباشي عزيز.
دوست عزيزم من يه مشكلي دارم.اينكه من ميخوام اولا هدرديتا گريم طوري باشه كه متن داخلش تو 2 يا سه سطر ديده نشه و در يك سطر قرار بگيره.
سوال دوما اينه كه من توي ديتا بيسم يك فيلد عكس دارم كه نميخوام اون ديده بشه.ميخواستم ببينم بايد دستور Select رو چي مدلي بنويسم؟
راستي يه خواهش كوچولو هم دارم.چيكار كنم اطلاعات توي گريد يكي در ميان سفيدو طوسي ديده بشه تا اطلاعات خوندنش راحت باشه.
من فايل ضميمه رو اينجا قرار ميدم تا اگه زحمتي نسي يه نگاهي بهش بندازين.
ممنونم...
منتظر جواب هستم...DataGrid.rar

----------


## barbodsoft.com

در پاسخ به پست 14 : یک خط در میون رنگی کردن - یک خطه کردن هدر ستون ها 
برای یک خطه شدن هدر ستون ها به جای کدی که مستقیم عرض رو تعریف کردی این کد رو بنویس

  DGW.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResi  zing


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

        DGW.RowsDefaultCellStyle.BackColor = Color.Gray
        DGW.AlternatingRowsDefaultCellStyle.BackColor = Color.Silver


و اما برای اینکه یک فبلد رو حذف کنی باید دستور select رو تغییر بدی به شکل کلی زیر

select fild1,fild2,fild3 from tablename





> دوست عزيز باربد ضمن تشكر اززحمات شما ميشه لطف كنيد وادامه آموزش گريد رابديد
> اگه ميشه كامبوباكس در گريد را توضيح بديد كه يك كد رو بگيره اطلاعات ديگه رو تو سلوله ثبت كنه 
> باتشكر


متوجه نشدم دقیقا چی می خواهید.

----------


## ehsan_g

گریدی دارم که از دوجدول تغذیه میکنه یکی مشخصات کالا ودیگری تعداد فروش حالااین اطلاعات رو در یک گرید نشون میدیم حالااگه کد کالارو وارد کردیم ناو وقیمت رو از جدول 1 توی سلولها بیارد وتعداد رو دریک سلول دیگه بگیره ودر قیمت ضرب کنه ودرسلول دیگری بریزه
سلولی که کد کالارو میگیره از نوع کامبو باشه 
ممنون

----------


## barbodsoft.com

در پاسخ به پست 16 : استفاده از combobox در دیتاگرید. و عمل جستجو با توجه به گزینه انتخابی در combobox

ابتدا دو ستون با نام id_kala و name_kala ایجاد کن  و ستون id_kala  رو از نوع combobox  در نظر بگیر
سپس کد زیر رو برای مقدار دادن به گزینه های combobox  وارد کن

        myconnection.Open()

        Dim cmd As New OleDbCommand("Select id_kala from tbkala", myconnection)
        Dim dr As OleDbDataReader = cmd.ExecuteReader
        While dr.Read

            Id_kala.Items.Add(dr("id_kala"))
        End While
        dr.Close()


و برای اینکه با توجه به کدی که انتخاب شده نام کالای مناسب نمایش داده شود این کد رو تو رویداد CellLeave وارد کن

        DGW.EndEdit()
        If e.ColumnIndex = 0 Then
            Dim idkala As Integer = DGW.Item("id_kala", e.RowIndex).Value
            Dim cmd As New OleDbCommand("Select name_kala from tbkala where id_kala='" & idkala & "'", myconnection)
            Dim obj As Object = cmd.ExecuteScalar
            DGW.Item("name_kala", e.RowIndex).Value = CType(obj, String)
        End If


فایل ضمیمه یک نمونه هست. امیدوارم بدرد شما بخوره

----------


## ehsan_g

باربد جان ممنون کد خوبی بود ولی یک سوال میشه این کامبو را به یک بایندینگ سورس متصل نمود

----------


## barbodsoft.com

در پاسخ به پست 18,16: استفاده از combobox در دیتاگرید. و عمل جستجو با توجه به گزینه انتخابی در combobox




> باربد جان ممنون کد خوبی بود ولی یک سوال میشه این کامبو را به یک بایندینگ سورس متصل نمود


می تونی از DataSource و DisplayMember استفاده کنی ولی برای پیدا کردن نام کالا نمی تونی از این دستور مثل اون چیزی که تو combox معمولی استفاده می کردیم استفاده کنی

DGW.Item("name_kala", e.RowIndex).Value = Id_kala.SelectedValue.ToString


برای استفاده از DataSource و DisplayMember به جای کد های برنامه ای که در پست 16 قرار دادم این رو بنویس

Imports System.Data.OleDb

Public Module Module1
    Public ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath & "\DataBase.mdb"
    Public myconnection As New OleDb.OleDbConnection(ConnectionString)
End Module

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        myconnection.Open()
        Dim da As New OleDbDataAdapter("Select * from tbkala", myconnection)
        Dim ds As New DataSet
        da.Fill(ds, "tbkala")
        Dim dt As DataTable = ds.Tables.Item("tbkala")
        Id_kala.DataSource = dt
        Id_kala.DisplayMember = "id_kala"
        'Id_kala.ValueMember = "name_kala" ' چون برای جستجو کار نمی کند غیر فعال کردم --- فقط جهت اطلاع


    End Sub

    Private Sub DGW_CellLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGW.CellLeave
        DGW.EndEdit() '
        If e.ColumnIndex = 0 Then
            Dim idkala As Integer = DGW.Item("id_kala", e.RowIndex).Value
            Dim cmd As New OleDbCommand("Select name_kala from tbkala where id_kala='" & idkala & "'", myconnection)
            Dim obj As Object = cmd.ExecuteScalar
            DGW.Item("name_kala", e.RowIndex).Value = CType(obj, String)

            'DGW.Item("name_kala", e.RowIndex).Value = Id_kala.SelectedValue.ToString 'کار نمی کند
        End If


    End Sub
End Class

----------


## barbodsoft.com

ریختن همه اطلاعات دیتاگرید در آرایه 




> سلام
> من برای انجام یکسری کار روی اطلاعات نمایش داده شده در دیتاگرید، نیاز دارم هر رکورد از این اطلاعات که نمایش داده شده رو داخل یکسری متغیر بریزم.
> سوال: چه جوری این کار رو بکنم.مثلا هر رکورد دیتاگرید دارای 3فیلد و من هم سه متغییر دارم. چه طور باید یک حلقه for بنویسم که تا زمتنی که رکوردی در دیتا گرید هست. سطر به سطر اطلاعات رو بخونه و داخل این متغییر ها بریزه. و پس از کار مورد نظر دوباره سطر بعدی داخل این متغییرها قرار بگیره.
> با تشکر


در کد زیر فرض شده که سه ستون با نام های col1 , col2 , col3 داریم که اولی و آخری از نوع استرینگ هستند. و دومی از نوع اینیجر


        Dim Str(DataGridView1.RowCount - 2) As String
        Dim int1(DataGridView1.RowCount - 2) As Integer
        Dim Str1(DataGridView1.RowCount - 2) As String
        For i As Integer = 0 To DataGridView1.RowCount - 2
            Str(i) = DataGridView1.Item("col1", i).Value
            int1(i) = DataGridView1.Item("col2", i).Value
            Str1(i) = DataGridView1.Item("col3", i).Value
        Next

----------


## نسترن تقی زاده

* 					کار بادیتاگرید 				*

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

----------


## barbodsoft.com

> * 					کار بادیتاگرید 				*
> 
>  من یه دیتاگرید واسه نمایش گروه ها درسایت خرید کتاب گذاشتم ومیخوام وقتی کاربر روی هر گروهی که کلیک میکنه کتابهای مربوط به اون گروه در صفحه ای دیگه نمایش داده بشن.البته من نوع ستون ها را از نوع hyperlink انتخاب کردم .لطفا کمکم کنید.


این که شما می فرمایید مربوط می شه به asp و باید در تالار خودش مطرح بشه.

----------


## barbodsoft.com

قفل کردن یک ستون یا سلول با توجه به مقدار سلول دیگر 




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


کد زیر رو تو رویداد CellEnter دیتاگرید ویو بنویس

        If e.ColumnIndex = 0 Then
            If DataGridView1.Rows(e.RowIndex).Cells(1).Value > 0 Then
                DataGridView1.Columns(0).ReadOnly = True
            Else
                DataGridView1.Columns(0).ReadOnly = False
            End If
        Else
            If DataGridView1.Rows(e.RowIndex).Cells(0).Value > 0 Then
                DataGridView1.Columns(1).ReadOnly = True
            Else
                DataGridView1.Columns(1).ReadOnly = False
            End If
        End If

می تونی شماره ستون رو براساس نیازت تغییر بدی

----------


## barbodsoft.com

چطور میشه ترتیب نمایش ستون ها رو در دیتاگریدویو تغییر داد؟

ایندکس دیتاگرید ویو readonly هست و بنابراین قابل تغییر نیست(حداقل تا جای که من می دونم) اما شما می تونید از طریق تغییر در خاصیت های هر ستون از جمله  هدر ، اندازه ، دیتاپروپرتی و غیر به نوعی به همون خواسته خودت برسی. 
کد زیر یک مثال هست



        DataGridView1.Columns.Item(0).HeaderText = "نام"
        DataGridView1.Columns.Item(0).DataPropertyName = "NAme"
        DataGridView1.Columns.Item(0).Width = 80
        '*************************************
        DataGridView1.Columns.Item(1).HeaderText = "نام خانوادگی"
        DataGridView1.Columns.Item(1).DataPropertyName = "Lname"
        DataGridView1.Columns.Item(1).Width = 120

----------


## hamed shahba

سلام دوستان
چطوری میتونم BackColorیه ستون([Columns[x) رو تغییر بدم

----------


## barbodsoft.com

در پاسخ به پست 25 : تغییر رنگ یک ستون از دیتا گرید ویو




> سلام دوستان
> چطوری میتونم BackColorیه ستون([Columns[x) رو تغییر بدم


کد پایین دومین ستون دیتاگرید رو به رنک قهوه ای در میاره. در ضمن بجای عدد یک می تونی نام ستون رو هم وارد کنی.

DataGridView1.Columns.Item(1).DefaultCellStyle.Bac  kColor = Color.Brown

----------


## hamed shahba

*مشکل در پرینت DGV* 


سلام دوستان
من با استفاده از کلاس PrintDGVاز دیتا گرید پرینت میگیرم 


خوب 
حالا یکی از فیلد های جدول از نوعbit هستش که در زمان نمایش مشکلی نداره ولی زمانی که پرینت میگیرم به صورت TRUE و FALSE چاپ میشه

راه حلی برای این مشکل وجود داره :ناراحت: 
باتشکر

----------


## barbodsoft.com

> *مشکل در پرینت DGV* 
> 
> 
> سلام دوستان
> من با استفاده از کلاس PrintDGVاز دیتا گرید پرینت میگیرم 
> 
> 
> خوب 
> حالا یکی از فیلد های جدول از نوعbit هستش که در زمان نمایش مشکلی نداره ولی زمانی که پرینت میگیرم به صورت TRUE و FALSE چاپ میشه
> ...


دوست عزیز من این تاپیک رو زدم که از تاپیکها و پست های تکراری جلوگیری کنم و حتی مطالب رو دسته بندی کردم. فهرست رو مطالعه می کزدی نیازی به این سوال نبود

به پست 4 مراجعه کن
پست 4 : آموزش پرینت از دیتاگرید ویو

----------


## barbodsoft.com

> با سلام و خسته نباشید...
> 
> سئوال 2:
> چطور باید حالت انتخاب رکورد در دیتا گراید رو از این حالت 
> 
> [
> 
> به این حالت تبدیل کرد
> 
> ...


قبل از هر چیز این کد رو اجرا کنید. DataGridViewColumnSortMode رو از حالت اتوماتیک باید خارج کرد.

                For j As Integer = 0 To DataGridView1.ColumnCount - 1
            DataGridView1.Columns(j).SortMode = DataGridViewColumnSortMode.NotSortable
        Next



اگر می خواهید یک خط انتخاب شود

DataGridView1.SelectionMode.FullRowSelect()


اگر می خواهید ستون انتخاب شود

DataGridView1.SelectionMode = DataGridViewSelectionMode.FullColumnSelect


اگر می خواهید سلول انتخاب شود

DataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect

----------


## JaVa

با سلام..

من چندتایی رکورد حذف و اضافه کردم/ بعد متوجه شدم که ID از همون شماره های قبل یه بعد شروع می کنه .!

چور میشه این شماره رو از 1 شروع کرد؟

واگه رکوردی رو از بانک حذف کردیم چطور باید بلافاصله ID ها از 1 تا N  بصورت کامل باشند منظور اینه که اگر یه بار مثلا رکورد شماره 20 حذف شد بعد از 19 به 21 نریم بلکه جایگزینی صورت بگیره یعنی 19 و20 و 21 . امیدوارم خوب توضیح داده باشم.؟

111.png

----------


## barbodsoft.com

> با سلام..
> 
> من چندتایی رکورد حذف و اضافه کردم/ بعد متوجه شدم که ID از همون شماره های قبل یه بعد شروع می کنه .!
> 
> چور میشه این شماره رو از 1 شروع کرد؟
> 
> واگه رکوردی رو از بانک حذف کردیم چطور باید بلافاصله ID ها از 1 تا N  بصورت کامل باشند منظور اینه که اگر یه بار مثلا رکورد شماره 20 حذف شد بعد از 19 به 21 نریم بلکه جایگزینی صورت بگیره یعنی 19 و20 و 21 . امیدوارم خوب توضیح داده باشم.؟
> 
> 111.png


این مشکل ربطی به دیتاگرید ویو نداره! مگر اینکه از روشهای ویزاردی استفاده کرده باشی که من اصلا این روشها رو نمی پسندم و اطلاعی ازش ندارم.

و اما از روش کد نویسی . این کد کوچکترین id ی که خالی مونده رو نمایش می ده. 
توضیح : من چون از 101 شروع می کنه مقدار اولیه رو 100 در نظر گرفتم. اگه شما از مثالا 1 شروع می کنید باید مقدار اولیه برای i رو 0 دنظر بگیرید.

        cmd = New SqlCommand("select id from tableName order by id  ", con)
        Dim dr As SqlDataReader
        dr = cmd.ExecuteReader
        Dim i As Integer = 100
        While dr.Read
            i += 1
            If dr("id") > i Then
                MsgBox(i)
                Exit While
            End If

        End While
        dr.Close()


 بهتر بود این سوال رو جای مناسب تری مطرح می کردید

----------


## barbodsoft.com

نحوه حذف کردن یک سطر




> سلام خسته نباشید دوستان
> 
> من می خواستم از طریق datagrid یک سطر رو حذف کنم 
> باید چه کدی استفاده کنم ؟


از کد زیر استفاده کنید . در کد زیر عدد یک یعنی سطر شماره دو و با تغییر این عدد می توانید سطرهای دیگری را حذف نمایید.

DataGridView1.Rows.RemoveAt(1)


و برای اضافه کردن یک سطر از کد زیر استفاده نمایید

DataGridView1.Rows.Add()

----------


## mehrdadtk

دوست عزیز ممنون،اما فقط در datagrid پاک می شه اما در پایگاه داده پاک نمیشه.
باید چه کنیم ؟

----------


## barbodsoft.com

> دوست عزیز ممنون،اما فقط در datagrid پاک می شه اما در پایگاه داده پاک نمیشه.
> باید چه کنیم ؟


این دستور که من نوشتم فقط یک سطر رو از دیتاگرید ویو حذف می کنه. برای حذف از دیتابیس باید دستور delete , sql رو اجرا کنید. که ربطی به دیتاگرید نداره. برای مثال :

   Dim cmd As SqlCommand = New SqlCommand("delete table where id='1'", SqlConnection)
        cmd.ExecuteNonQuery()

البته ابن یک مثال خیلی ساده بود.

----------


## mehrdadtk

دوست عزیز ممنونم، فقط یه راهنمایی کوچک  SqlConnection ایراد میگیره . :افسرده:

----------


## barbodsoft.com

پیشنهاد می کنم یک کتاب در مورد بانک اطلاعاتی (ترجیحا sql) و یک کتاب در مورد ADO.net مطالعه کنی. 

و اما سوال شما که ربطی هم به این تاپیک نداره SqlConnection رشته اتصال به بانک اطلاعاتی هست. که شما باید در برنامه خود تعریف کنید. اگه بخوام بیشتر توضیح بدم باید یک آموزش کامل ado.net برات بزارم که فکر نمی کنم لازم باشه. چون قبلا دوستان دیگه مفصل آموزش دادن فقط باید سرچ کنی.

این تاپیک هم که یکی از دوستان گذشتن می تونه مفید باشه
دانلود کنید : دستوارت ADO.NET بصورت تفکیک شده

----------


## mohammad_y

salam 
khaste nashin agha ina hich kodomeshon ba vb 2012 baz namishe peygham support mide'

----------


## asal22

خواهشا راهنمایی ام نمایید خیلی فورییییه!!! من یک گریدویو دارم که یک ستون  از نوع HyperLinkField دارد که عملیات حذف رو برام انجام میده ولی میخوام  قبل از حذف پیغام بده "آیا مطمئن به حذف هستید؟ " و داخل این پیغام دو  گزینه "بله" و" خیر " باشه که در صورت فشردن گزینه "بله" این رکورد حذف  شود.

----------


## swallow.pa

لطفادر مورد كنترل خطاهاي رايج با ديتا
گريد هم مطلبي بنويسيد
ممنون

----------


## swallow.pa

لطفادر مورد كنترل خطا و يا كنترل ورودي داده ها هم مطالبي بنويسيد 
ممنون

----------


## barbodsoft.com

> لطفادر مورد كنترل خطا و يا كنترل ورودي داده ها هم مطالبي بنويسيد 
> ممنون


حتما اينكار را خواهم كرد فقط الان چون رو سيستم خودم نيستم و اينجا vb  نصب نيست و ... اينشالله فردا ...

----------


## barbodsoft.com

حذف یک سطر از طریق کلیک کردن روی همان سطر (می تونید یک ستون با نام حذف داشته باشید و کاربر روی آن کلیک کند)




> خواهشا راهنمایی ام نمایید خیلی فورییییه!!! من یک گریدویو دارم که یک ستون  از نوع HyperLinkField دارد که عملیات حذف رو برام انجام میده ولی میخوام  قبل از حذف پیغام بده "آیا مطمئن به حذف هستید؟ " و داخل این پیغام دو  گزینه "بله" و" خیر " باشه که در صورت فشردن گزینه "بله" این رکورد حذف  شود.


اول از همه ببخشید که اینقدر دیر به دیر می یام اینجا



   Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

        If e.ColumnIndex = 2 Then
            If MessageBox.Show("آیا برای حذف مطمئن هستید؟", "www.barbodsoft.ir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                Try
                    DataGridView1.Rows.RemoveAt(e.RowIndex)
                Catch ex As Exception
                    MsgBox("این سطر قابل حذف نیست")
                End Try
            End If
        End If
    End Sub



تو کد بالا  If e.ColumnIndex = 2 Then چک می کند که برروی ستون مورد نظر (ستون با نام حذف که اینجا ایندکس 2 هست)کلید شده یا نه و دقیقا در سطر بعدی از کاربر پرسیده می شود آیا مطمئن هست برای حذف یا خیر

----------


## barbodsoft.com

کنترل ورودی در دیتاگرید ویو




> لطفادر مورد كنترل خطاهاي رايج با ديتا
> گريد هم مطلبي بنويسيد
> ممنون


در کد زیر تو سلول اگر کارکتری غیر از اعداد وارد شود اخطار خواهد داد


  Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlSho  wingEventArgs) Handles DataGridView1.EditingControlShowing
        If Me.DataGridView1.CurrentCell.ColumnIndex > 3 And Not e.Control Is Nothing Then
            Dim tb As TextBox = CType(e.Control, TextBox)
            AddHandler tb.KeyPress, AddressOf DataGridView1_KeyPress
        End If
    End Sub

    Private Sub DataGridView1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DataGridView1.KeyPress

        If (Char.IsNumber(e.KeyChar) <> True) Then
            e.Handled = True
            MessageBox.Show("لطفا فقط عدد وارد کنید", "", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
        End If
    End Sub

----------


## samser

سلام دوستان
من تو پروژم دیتا گریدامو اتو سیز میکنم اما میخوام فیلد اولم با بقیه اندازش فرق کنه میدونم اتو سایز با توجه به اندازه گرید ویو و تعداد ستون هاست...اما من میخوام بجز یک ستون بقیه هم اندازه باشن فقط ستون اول اندازش فرق کنه و بزرگتر باشه...میشه بگید چه جوری میشه این کارو کرد؟ممنون...

----------


## swallow.pa

درباره گنترل داده ها که توی دیتاگرید وارد میشن و باید چک بشه که درست وارد شدن یا نه و نمایش پیغام مناسب در هنگام اصلاح رکورد ها و اضافه کردن رکورد جدیدممنون

----------


## Mohamad.Net.MSDN

سلام دوستان من توی یه پست هم نوشتم اما کسی حاظر به جواب دادن نشد.

مسئله من اینه که یه برنامه دیکشنری نوشتم با دیتابیس اکسس که دوتا کلومن داره یکی به نام ar و دیگریfa حالا من میخوام وقتی کلمه رو داخل تکست باکس وارد میکنم، سلول حاوی لغت به صورت اتوماتیک داخل یک تکست باکس دیگه کپی بشه!!
تا کاربر بتونه مرتب تر معنی رو ببینه یا در صورت لزوم کپی کنه.
البته در رویداد Textchanged تکست باکس 1 باید بنویسم اما نمیدونم چه کدی باید به کار ببرم که کلومن دوم انتخاب بشه.

----------


## Mohamad.Net.MSDN

آقا من سوالم غیر شرعی که نیست بدون اخطار پاکش میکنید:
عزیز من ببین فقط من مشکلم اینه که میخوام سلول کلومن دوم دیتابیس اکسس ام رو که در برنامه دیکشنری و از طریق سرچ در تکست باکس دو انتخاب شده بدون نیاز به کلیک کردن کاربر روی اون داخل تکست باکس 2 نشون داده بشه همین!!!!

----------


## Mohamad.Net.MSDN

*آقا من سوالم غیر شرعی که نیست بدون اخطار پاکش میکنید:
عزیز من ببین فقط من مشکلم اینه که میخوام سلول کلومن دوم دیتابیس اکسس ام رو که در برنامه دیکشنری و از طریق سرچ در تکست باکس 1 انتخاب شده بدون نیاز به کلیک کردن کاربر روی اون داخل تکست باکس 2 نشون داده بشه همین!!!!*  :خیلی عصبانی:   :خیلی عصبانی:   :خیلی عصبانی:   :خیلی عصبانی:   :خیلی عصبانی:   :خیلی عصبانی:

----------


## mohsen22

> در پاسخ به پست 14 : یک خط در میون رنگی کردن - یک خطه کردن هدر ستون ها 
> برای یک خطه شدن هدر ستون ها به جای کدی که مستقیم عرض رو تعریف کردی این کد رو بنویس
> 
>   DGW.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResi  zing
> 
> 
> برای اینکه یک خط در میون رنگی بشه کد زیر رو بنویس(کد زیر از دو رنگ خاکستری و نقره ای استفاده کرده)
> 
>         DGW.RowsDefaultCellStyle.BackColor = Color.Gray
> ...


سلام . میخوام  آخرین رکوردی که  اضافه میشه  هم در حالت SELECT باشه (بصورت سطری) و هم به صورت  رنگی  متفاوت در بیاد . چه باید بکنم؟
مرسی

----------


## swallow.pa

دوتاتايپيك خوب دررابطه با ديتاگريد ايجاد شده اما هيچكدوم اين قابليت رو ندارد كه :
يك سلول ديتاگريد كه به دو قسمت تقسيم بشه قسمت اول تكست باكس و قسمت دوم باتن و هنگامي كه روي تكست باكس فوكوس بشه باتن نمايش داده بشه  خب حالا ايا اين كار امكان داره

----------


## gilsoft

> دوتاتايپيك خوب دررابطه با ديتاگريد ايجاد شده اما هيچكدوم اين قابليت رو ندارد كه :
> يك سلول ديتاگريد كه به دو قسمت تقسيم بشه قسمت اول تكست باكس و قسمت دوم باتن و هنگامي كه روي تكست باكس فوكوس بشه باتن نمايش داده بشه  خب حالا ايا اين كار امكان داره


سلام دوستان

من هم دقیقا دنبال یه همچین چیزی هستم (_برای ورود سند حسابداری میخوام_)

----------


## mohsen22

سلام . چگونه مقادیر  همه سلولهای  سطری که در دیتا گرید انتخاب شده رو  با دبل کلیک  به تکست باکسهای فرم دیگری منتقل کنم (تک باکسها در فرم دیگری هستند) مرسی

----------


## khaleghi

سلام ببخشيد من توي ديتاگريدويو كه توي فرمم هست ميخوام يكي از ستوناش دكمه باشه كه اطلاعات رو تو db ذخيره كنه،ميشه لطف كنيد نحوه نوشت دستورات رو توي دكمه ديتا گريد توضيح بديد و يك نمونه كد برام بذاريد

----------


## salami_omid

با سلام من نیاز به یک استاد VB  دارم که  مرا در برنامه هایم راهنمایی کند هزینه آموزش با توافق پرداخت میشود لطفا در صورت تمایل 
ایمیل ارسال فرمائید zalami_o@yahoo.com

----------


## oranoos

با سلام ممنون از اینکه یک تاپیک برای دیتا گرید باز کردید 
دوستان اگه لطف کنن و راجع به نحوه ذخیره اطلاعات در دیتا گرید ویو به نحوی که با وارد کردن مقادیر در سلول همان لحظه ذخیره شود توضیح دهند ٰٰ.ممنون میشم 
یک مورد دیگه که من با سرچ به نتیجه نرسیدم اینه که با کلیک روی هر ستون مقادیر بر اساس همان ستون مرتب می شوند ولی اگه یک سلول از نوع باتون برای ویرایش وجود داشته باشه اون کد هم اجرا میشه .چطور میشه این مشکل رو حل کرد؟؟؟؟

----------


## amirm2012

Private Sub DataGridTakhsis()
        connect.Open()
        Dim DTakh As New OleDbDataAdapter
        Dim DTakhset As New DataSet
        Dim StrDB As String
        StrDB = "SELECT takhnumber as [شماره ],takhDate as  [تاریخ ],takhmablaghkol as  [مبلغ ],bar01 as  [مبلغ  01] "
        (Takh = New OleDbDataAdapter(StrDB, connect)
*این قسمت خطا میده مشکل چیه؟      ( DTakh.Fill(DTakhset, "takhsis")*
       ( GridViewTakhsis.DataSource = DTakhset.Tables("takhsis")
        connect.Close()

    End Sub
اینم خطای برنامه 
 :متفکر:  :متفکر: No value given for one or more required parameters.

----------


## hamidrezax1

سلام من میخوام اطلاعات یک دیتا گرید رو درون یک دیتا گرید دیگه ذخیره کنم چجوری این کار امکان داره؟؟؟؟؟؟
جواب به دست اومده با یه حلقه فور و یک دیتا گردید جدیده.خداییش خودم حوصلم نشد کد هاش رو بنویسم :گریه:

----------

