none
關於 DataGridView RRS feed

  • 問題

  • 我現在要add資料到 DataGridView1 內,我想先確認是否裡面已經有這筆資料,
    以前在 Listbox 或 combobox直接丟一個字串就好了,
    可是 DataGridView1 好像要丟一個 row ,我不知道該怎麼設定,
    可以請教各位大大 問號 裡面要丟什麼進去?可以給的例子嗎?

            If DataGridView1.Rows.IndexOf(??????) = -1 Then
                DataGridView1.Rows.Add(txtName.Text, txtType.Text)
            End If












    另外關於 DataGridView1 選取欄位資料擷取,以下是我硬擠出來的方法,不知道有沒有更好的方式?

        '取得選取的 Rows' String
        Private Function MyDGSelectStr(ByVal dg As DataGridView) As String()
            Dim TempStr As String = "" '存放擷取出來各個欄位的值,用逗號分開

            For i As Integer = 0 To dg.ColumnCount - 1
                TempStr &= DataGridView1.SelectedRows.Item(0).Cells(i).Value
                If i <> dg.ColumnCount - 1 Then
                    TempStr &= ","
                End If
            Next

            'TempStr &= ControlChars.Back
            Dim SpStr() As String = TempStr.Split(",") '利用字串陣列將 TempStr 做 Split

            Return SpStr
        End Function

    2008年10月19日 下午 03:07

解答

  • 如果你對於找到的 DataGridViewRow 沒有要特別處理的話,可以對資料來源的 Row.Contains 方法來判斷是否存在。

    參考以下程式碼:


    using System;


    using System.Data;


    using System.Windows.Forms;


     


    namespace WindowsFormsApplication1


    {


        public partial class Form1 : Form


        {


            public Form1()


            {


                InitializeComponent();


            }


     


            private readonly DataTable dt = new DataTable();


     


            private void Form1_Load(object sender, EventArgs e)


            {


                dt.Columns.Add("Name", typeof (string));


                dt.Columns.Add("Type", typeof (string));


                dt.Columns.Add("TTT", typeof (string));


                dt.PrimaryKey = new[] {dt.Columns[0], dt.Columns[1]};


     


                dt.Rows.Add("A", "1", "11");


                dt.Rows.Add("B", "2", "22");


                dt.Rows.Add("C", "3", "33");


     


                dataGridView1.DataSource = dt;


            }


     


            private void button1_Click(object sender, EventArgs e)


            {


                if (dt.Rows.Contains(new[] {textBox1.Text, textBox2.Text}))


                {


                    MessageBox.Show("Found");


                }


                else


                {


                    MessageBox.Show("NOT Found");


                }


            }


        }


    }



    2008年10月22日 下午 04:33
  • 可能是以下的寫法:


    If dt.Rows.Contains(New Object() {TextBox1.Text, TextBox2.Text}) Then


        MessageBox.Show("Found")


    Else


        MessageBox.Show("NOT Found")


    End If



    2008年10月22日 下午 09:54
  • 你可以先看看 ADO.NET 開發高手線上教學課程 相信對你有相當大的幫助
    2008年10月23日 下午 03:19

所有回覆

  • HI,

     

    您可以在DataGridView的CellValidating事件中處理, 請參考:

    http://www.vbforums.com/showthread.php?t=519684

     

    tihs

    2008年10月20日 上午 04:02
  • 他那個好像是丟一個值進去而已耶?
    是我會錯意了嗎?=口=

    因為我的
    DataGridView1 一個row有兩個column,
    所以我要add資料前想先判斷是否有重複。
    (txtName.Text 和 txtType.Text 要同時符合兩個column的值)

            If DataGridView1.Rows.IndexOf(??????) = -1 Then
                DataGridView1.Rows.Add(txtName.Text, txtType.Text)
            End If

    2008年10月20日 下午 12:34
  • 丟進去得是一個 DataGridViewRow 物件....

    參考: 
    DataGridViewRowCollection.IndexOf 方法
    2008年10月20日 下午 05:22
  • 對!!

    我主要的不懂的地方就是,
    我不會設定
    DataGridViewRow 的內容,
    怎麼把
    txtName.Text 和 txtType.Tex 丟DataGridViewRow !

    之前可能沒有描述很情楚,
    不好意思!


    2008年10月21日 上午 12:30
  • 有人可以幫忙回答嗎?

    我找了兩天了 =口= !!
    2008年10月22日 下午 03:07
  • 如果你對於找到的 DataGridViewRow 沒有要特別處理的話,可以對資料來源的 Row.Contains 方法來判斷是否存在。

    參考以下程式碼:


    using System;


    using System.Data;


    using System.Windows.Forms;


     


    namespace WindowsFormsApplication1


    {


        public partial class Form1 : Form


        {


            public Form1()


            {


                InitializeComponent();


            }


     


            private readonly DataTable dt = new DataTable();


     


            private void Form1_Load(object sender, EventArgs e)


            {


                dt.Columns.Add("Name", typeof (string));


                dt.Columns.Add("Type", typeof (string));


                dt.Columns.Add("TTT", typeof (string));


                dt.PrimaryKey = new[] {dt.Columns[0], dt.Columns[1]};


     


                dt.Rows.Add("A", "1", "11");


                dt.Rows.Add("B", "2", "22");


                dt.Rows.Add("C", "3", "33");


     


                dataGridView1.DataSource = dt;


            }


     


            private void button1_Click(object sender, EventArgs e)


            {


                if (dt.Rows.Contains(new[] {textBox1.Text, textBox2.Text}))


                {


                    MessageBox.Show("Found");


                }


                else


                {


                    MessageBox.Show("NOT Found");


                }


            }


        }


    }



    2008年10月22日 下午 04:33
  • 大大你好,

    關鍵應該就是這行
    if (dt.Rows.Contains(new[] {textBox1.Text, textBox2.Text}))
    小弟不才,若是VB的語法該怎麼去寫呢?
    2008年10月22日 下午 05:01
  • 可能是以下的寫法:


    If dt.Rows.Contains(New Object() {TextBox1.Text, TextBox2.Text}) Then


        MessageBox.Show("Found")


    Else


        MessageBox.Show("NOT Found")


    End If



    2008年10月22日 下午 09:54
  • 謝謝 chhuang 大大

    但 
    If dt.Rows.Contains(New Object() {TextBox1.Text, TextBox2.Text}) Then


    紅色部分出現蚯蚓,訊息是 "Object 值 無法轉成 System.Windows.form.DataGridViewRow"


    我的問題點就在這裡,我不知道如何把TextBox1.Text, TextBox2.Text 參數放到 DataGridViewRow =口=

    2008年10月23日 上午 07:44
  • 仔細看一下我的 dt 的型別....!!

    2008年10月23日 上午 08:35
  • chhuang 大大你好:

    我有看到你的dt型別為 DataTable ,
    可是 VB.net 2005 好像沒有看到這個東西。
    而且我UI上面也是放 DataGridView,
    我有嘗試一段程式碼,沒有蚯蚓,但是卻有問題。

     

    Code Snippet

            '先宣告一個 DataGridView
            Dim TempDG As New DataGridView


            '增加它的 Columns
            TempDG.Columns.Add("Column1", "Name")
            TempDG.Columns.Add("Column2", "Type")


            '新增資料
            TempDG.Rows.Add(txtName.Text, txtType.Text)


            '宣告一個 DataGridViewRow 來放剛新增的內容
            Dim r As New DataGridViewRow
            r = TempDG.Rows.Item(0)

     

            '釋放掉
            TempDG.Dispose()

     

            '測試是否有抓到。
            Dim txtCol1, txtCol2 As String
            txtCol1 = r.Cells(0).Value '確認後可得到 txtName.Text
            txtCol2 = r.Cells(1).Value '確認後可得到 txtType.Text

     

            '有包含的話,則不新增。
            If Not DataGridView1.Rows.Contains(r) Then '
                DataGridView1.Rows.Add(txtName.Text, txtType.Text)
            End If

     

     

    紅色那段有問題,不管怎樣,他一定都不包含耶= =...我也不知道為什麼=口=
    2008年10月23日 下午 02:17
  • 你可以先看看 ADO.NET 開發高手線上教學課程 相信對你有相當大的幫助
    2008年10月23日 下午 03:19
  • 哈囉, chhuang 大大。

    我最後測試出來了,謝謝。

    我讓 DataGridView的DataSource = dt 就可以完成了。

    我一直以為dt是工具介面= =...謝謝
    2008年10月23日 下午 07:20