在运行时期间向DataGrid ComboBox添加值。该值不应该是组合框列表

时间:2017-07-28 05:31:31

标签: c#

我试图在运行时向数据网格视图表中的组合框添加值。首先,我已将项添加到组合框中。在运行期间,我试图将数据从数据表添加到数据网格。如果数据不是组合框项的一部分,则表示不接受。我希望它接受该值并将其显示在网格中,尽管它不是组合框的一部分。请参阅下面的代码示例:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("FieldName");
            dt.Columns.Add("Value");
            dt.Columns.Add("Flags");
            dt.Rows.Add("Field1", "Value1", "#A");
            dt.Rows.Add("Field2", "Value2", "#B");
            dt.Rows.Add("Field3", "Value3", "#C");
            dt.Rows.Add("Field4", "Value4", "#D");
            dt.Rows.Add("Field5", "Value5", "#E");

            foreach (DataRow dr in dt.Rows)
            {
                string fieldName = Convert.ToString(dr["FieldName"]);
                string value = Convert.ToString(dr["Value"].ToString());
                string flags = Convert.ToString(dr["Flags"].ToString());
                dataGridView1.Rows.Add(fieldName, value, flags);
            }

            ComboBox cb = new ComboBox();
            AddListComboBox(ref cb);
            ((DataGridViewComboBoxColumn)dataGridView1.Columns["Flags"]).DataSource = cb.Items;

        }

        DataTable csvDataTable = new DataTable();
        public DataTable defaultFlagsDataTable()
        {
            //Create default flags datatable
            if (csvDataTable.Rows.Count <= 0)
            {
                csvDataTable.Columns.Add("Name", typeof(string));
                csvDataTable.Columns.Add("Description", typeof(string));
                csvDataTable.Columns.Add("Obsolete", typeof(bool));
                csvDataTable.Columns.Add("Color", typeof(string));
            }

            //Add default flags to datatable
            csvDataTable.Rows.Add("#A", "Asset Data", false, 13168840);
            csvDataTable.Rows.Add("#B", "System Default", false, 15780518);
            csvDataTable.Rows.Add("#C", "Data From GeoPlan", false, 65280);
            csvDataTable.Rows.Add("#D", "Model Import", false, 3981040);
            csvDataTable.Rows.Add("#E", "System Calculated", false, 3981040);
            //csvDataTable.Rows.Add("#F", "CSV Import", false, 33023);

            return csvDataTable;
        }

        public void AddListComboBox(ref ComboBox CB)
        {
            defaultFlagsDataTable();
            foreach (DataRow dr in csvDataTable.Rows)
            {
                string flags = dr["Name"].ToString();
                CB.Items.Add(flags);
            }
        }


    }
}

1 个答案:

答案 0 :(得分:0)

假设您的组合框值绑定到数据网格,那么这不起作用。组合框中的项目必须包含可能在数据库字段中的所有可能值。这类似于枚举。在这种情况下,我通常在数据库中有一个单独的“选项”表,列出所有选项(通常是id,描述格式),然后在主表上强加外键限制。然后,我不是在代码中手动创建列表,而是将选项表的内容读入DataTable,并将其作为ComboBox的DataSource。