1

私はこれに何日も苦労しており、DataTables と dataGridViews がすべて混同されています。

私は、DataGridView、dataGridView1、および DataTable のエラーを持つ WinForms プログラムを持っています。

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

さらに下にある ValidateText というメソッドで、テキスト ファイルから 1 行ずつデータを配列に読み取ります。また、エラー データテーブルの列も定義します。

 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 を追加するのは難しいようです。

ありがとう、

アマンダ

4

1 に答える 1

1

これは私の提案です。.NETFrameworkにはすでに国のリストがあります。したがって、このクラスを使用できます。このコードを誰が作成したか忘れました:)

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; }
        }
    }
于 2012-12-04T00:59:33.007 に答える