【问题标题】:How to create a combobox column in a datatable如何在数据表中创建组合框列
【发布时间】:2012-12-03 22:11:40
【问题描述】:

我已经为此苦苦挣扎了好几天,我把 DataTables 和 dataGridViews 搞混了。

我有一个 WinForms 程序,它有一个 DataGridView、dataGridView1 和一个 DataTable,出现错误。

public static DataTable errors = new DataTable();
dataGridView1.DataSource = errors;

现在,在一个名为 ValidateText 的方法中,我将文本文件中的数据逐行读取到一个数组中,并在其中定义错误数据表的列:

 errors.Columns.Add("Account Number");
 errors.Columns.Add("Customer Name");
 errors.Columns.Add("Country");
 errors.Columns.Add("State");
 errors.Columns.Add("Ship-to Country");
 errors.Columns.Add("Ship-to State");

 var lines = File.ReadAllLines(file);

   foreach (string line in lines)
   {.
    . 
    . 
    string []items=line.Split('\t').ToArray();
    errors.Rows.Add(items[0], items[1],...items[5]);

当我运行它时效果很好。问题是,我想让“国家”列中有一个组合框,所以当程序运行时,数据显示在 dataGridView1 中,用户将有机会选择一个新的国家,如果他们想要,从“国家”一栏。在程序的更下方,我确实定义了一个 创建 DataGridViewComboBoxColumn 的方法

private DataGridViewComboBoxColumn CreateComboBoxColumn()
    {
        DataGridViewComboBoxColumn buildCountries = new DataGridViewComboBoxColumn();
        buildCountries.HeaderText = "List of Countries";
        DataTable dataTable = new DataTable();
        dataTable.Columns.Add("Keys");
        dataTable.Columns.Add("Values");
        KeyValuePair<string, string>[] array = CountryList.ToArray();
        foreach (KeyValuePair<string, string> kvp in array)
        {
            dataTable.Rows.Add(kvp.Key, kvp.Value);
        }
        buildCountries.DataSource = dataTable;
        buildCountries.DisplayMember = "Values";
        buildCountries.ValueMember = "Keys";

        return buildCountries;


    }

我遇到的问题是,如何将我在最后一种方法中创建的组合框放入我在上面创建的“国家/地区”列中?我觉得我没有得到 DataGridView 和 DataTable 的东西。您将 DataTable 绑定到 DataGridView,但添加此 DataGridViewComboBoxColumn 似乎很难。

谢谢,

阿曼达

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    这只是我的建议,.NET Framework 已经有一个国家列表。所以你可以使用这个类。我忘了是谁创建了这段代码:)

    public static class CountryEntries
        {
            public static IEnumerable<Country> GetCountries()
            {
                return from ri in
                           from ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                           select new RegionInfo(ci.LCID)
                           orderby ri.DisplayName
                       group ri by ri.TwoLetterISORegionName into g                       
                       select new Country
                       {
                           CountryId = g.Key,
                           Title = g.First().DisplayName
                       };
            }
            public class Country
            {
                public string CountryId { get; set; }
                public string Title { get; set; }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      相关资源
      最近更新 更多