簡體   English   中英

使用數據表在綁定的數據網格上的DataGridComboBoxColumn上的C#設置值

[英]C# Setting value on DataGridComboBoxColumn on bound datagrid using datatables

使用C#

使用SQL,我用查詢結果填充數據表。

然后我創建了一個使用該數據表作為源的數據網格。

該數據網格已使用類型為DataGridViewComboBoxColumn的列進行配置。

組合框的數據源是另一個SQL加載的數據表,每行有兩個字符串。 一個字符串是我需要的實際值,第二個字符串是用戶可見的字符串。

正確使用第二個數據表中的信息填充了組合框,並且這些值可以按需工作。 當我從數據表中保存數據時,我將獲得有關組合框的正確信息。

當我嘗試將保存的SQL信息重新加載到該數據網格中時,問題就產生了。 該值似乎不受數據表約束。

Datagrid定義:

        dgHeaders.DataSource = dtCSVHeaders;

        dgHeaders.Columns["nIndex"].Visible = false;

        if (!dgHeaders.Columns.Contains("colType"))
        {
            DataGridViewComboBoxColumn colType = new DataGridViewComboBoxColumn();
            colType.HeaderText = "DB Field";
            colType.DropDownWidth = 140;
            colType.Width = 140;
            colType.DataSource = dtFields;
            colType.DataPropertyName = "szDBField";
            colType.DisplayMember = "szVisualField";
            colType.ValueMember = "szDBField";
            colType.Name = "DB Field";
            colType.DefaultCellStyle.NullValue = "--Select--";
            dgHeaders.Columns.Add(colType);

        }

首先,我嘗試將列名colType設置為我在dataRow中填充的值,但這似乎不起作用。

由於我無法弄清楚如何使數據綁定正常工作,因此我決定嘗試將單元格強制為所需的值,因此我在數據負載上進行了嘗試。

        ... SQL load

        foreach (DataRow drRow in dtLoad.Rows)
        {
            string szColumnName = drRow["szOrgColumnName"].ToString();
            string szMatchName = drRow["szMatchColumn"].ToString();
            DataRow drAdd = dtCSVHeaders.NewRow();
            drAdd["nIndex"] = nLoop;
            drAdd["szHeader"] = szColumnName;
            dtCSVHeaders.Rows.Add(drAdd);
            dgHeaders.Rows[nLoop].Cells[2].Value = szMatchName;
            nLoop++;
        }

但是可悲的是,它仍然沒有設置組合框的值。

我在此代碼上沒有錯誤或警告。

我寧願讓數據綁定來控制並執行其操作,而無需我專門用該值設置單元格。 但是,如果那是我需要做的,那就是...

嗯,您的代碼(據我所知)似乎不錯。 我不知道您的“ dtFields”對象到底是什么,但是它應該是dataTable。 我做了一個簡單的示例,說明應如何做。 看看這個:

public partial class Form1 : Form
{        
    public Form1()
    {
        InitializeComponent();
        dataGridView1.Columns.Add("column1", "Column name");
        dataGridView1.Columns.Add(CreateComboBox());
        //adding some rows:
        dataGridView1.Rows.Add("a");
        dataGridView1.Rows.Add("b");
    }

    private DataGridViewComboBoxColumn CreateComboBox()
    {
        DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
        {
            combo.Name = "comboColumn";
            combo.HeaderText = "Selection";
            combo.DataSource = GetDataForComboBox();
            combo.DisplayMember = "Name";
            combo.ValueMember = "Id";
        }
        return combo;
    }

    private DataTable GetDataForComboBox()
    {
        //this is your method to get the data from database

        //in my exmaple I will simply add some example data:
        DataTable table = new DataTable("ExampleData");
        table.Columns.Add("Id", typeof(int));
        table.Columns.Add("Name", typeof(string));
        table.Rows.Add(1, "Name 1");
        table.Rows.Add(2, "Name 2");
        table.Rows.Add(3, "Name 3");
        return table;
    }
}

此代碼有效,並且嘗試執行相同的操作,只需從dataBase填充dataTable。 但是,如果您願意,只能嘗試使用我的確切代碼,您會發現它起作用了!

再見

暫無
暫無

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

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