簡體   English   中英

如何使用文本框數組將文本框綁定到 datagridview

[英]How to bind textboxes to datagridview by using textbox array

我有三個按鈕可以將不同的表加載到 datagridview 中。 每個表都有不同數量的文本框。 我知道,連接文本框和 dgv 的方法之一是

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
            {
                if (dataGridView1.Columns.Count == 5)
                {
                    textBox3.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    textBox4.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
                    //textBox5.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
                    //richTextBox1.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
                    //richTextBox2.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
                }
                if (dataGridView1.Columns.Count == 6)
                {
                    textBox3.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    textBox4.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
                    //textBox5.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
                    //textBox6.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
                    //richTextBox1.Text = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
                    //richTextBox2.Text = dataGridView1.SelectedRows[0].Cells[5].Value.ToString();
                }
                else
                {
                    textBox3.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    textBox4.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
                }
            }
}

但它的代碼有點長,我想試着讓它更清楚。 我想使用文本框數組(如果可能的話?),我試過這個:

                int i = 1;
                TextBox[] textboxes = new TextBox[i];
                textboxes[0] = textBox1; textboxes[1] = textBox2;
                textboxes[2] = textBox2; textboxes[3] = textBox3;
                for (int j = 1; i < textboxes.Length; i++)
                {
                    //i dont know how to jump to the next cell of current row in the dtg
                }

除了文本框 arrays 之外,還有其他選項嗎?

我希望我能正確理解這個問題,並且您正在尋找將Textbox es 手動綁定到DataGridView 請注意,Windows Forms 中還內置了綁定。

以下示例中的先決條件:

  • 名為dg DataGridView
  • 每列都有Name
  • Texbox 的Name設置為字符串“tb”和列名(即“tbID”)
  • DataGridView.SelectionMode設置為FullRowSelect
  • 圖片中未顯示將示例數據集加載到DataGridView中的按鈕

在此處輸入圖像描述

C#:

// Sample data set
private void BtnLoadDg_Click(object sender, EventArgs e)
{
    DataTable tb = new DataTable();
    tb.Columns.Add("ID");
    tb.Columns.Add("Model");
    tb.Columns.Add("Brand");
    tb.Columns.Add("Description");
    tb.Rows.Add(
    {
        1,
        "T87",
        "Tatra",
        "A classic streamlined car."
    });
    tb.Rows.Add(
    {
        2,
        "L&K A",
        "Laurin&Klement",
        "First L&K car from 1905."
    });
    this.dg.DataSource = tb;
}

private void dg_SelectionChanged(object sender, EventArgs e)
{
    if (this.dg.SelectedRows.Count > 0)
    {
        foreach (DataGridViewColumn col in dg.Columns)
        {
            Control[] tbs = Panel1.Controls.Find("tb" + col.Name, false);
            if (!Information.IsNothing(tbs) && tbs.Count > 0)
            {
                TextBox tb = (TextBox)tbs[0];
                DataGridViewCell cell = this.dg.Rows(this.dg.SelectedRows(0).Index).Cells(col.Index);
                tb.Text = cell.Value;
            }
        }
    }
    else
    {
        this.tbID.text = "";
        this.tbModel.text = "";
        this.tbBrand.text = "";
        this.tbDescription.text = "";
    }
}

VB.NET:

    ' Sample data set
    Private Sub BtnLoadDg_Click(sender As Object, e As EventArgs) Handles BtnLoadDg.Click
        Dim tb As New DataTable
        tb.Columns.Add("ID")
        tb.Columns.Add("Model")
        tb.Columns.Add("Brand")
        tb.Columns.Add("Description")
        tb.Rows.Add({1, "T87", "Tatra", "A classic streamlined car."})
        tb.Rows.Add({2, "L&K A", "Laurin&Klement", "First L&K car from 1905."})
        Me.dg.DataSource = tb
    End Sub

    Private Sub dg_SelectionChanged(sender As Object, e As EventArgs) Handles dg.SelectionChanged
        If Me.dg.SelectedRows.Count > 0 Then
            For Each col As DataGridViewColumn In dg.Columns
                Dim tbs() As Control = Panel1.Controls.Find("tb" & col.Name, False)
                If Not IsNothing(tbs) AndAlso tbs.Count > 0 Then
                    Dim tb As TextBox = CType(tbs(0), TextBox)
                    Dim cell As DataGridViewCell = Me.dg.Rows(Me.dg.SelectedRows(0).Index).Cells(col.Index)
                    tb.Text = cell.Value
                End If
            Next
        Else
            Me.tbID.text = ""
            Me.tbModel.text = ""
            Me.tbBrand.text = ""
            Me.tbDescription.text = ""
        End If
    End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM