DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■34904 / inTopicNo.1)  WinformでのDataGridView Comboboxのデータ追加削除が出来ない
  
□投稿者/ たんと 一般人(1回)-(2021/09/08(Wed) 19:26:29)
  • アイコン環境/言語:[.NET Framework 4.7.2] 
    分類:[.NET] 

    コンボボックスを絞り込みできるようにしています。
    別のフォームで、コンボボックスの内容を修正できるようにしてあり
    修正した後はテキストデータに書き出しているのですが
    その場で更新というのが出来ません。
    UserFormを起動し直せば、問題なく動作します。
    Comboboxの再読み込み方法などはないでしょうか。
    DataGridViewを利用しているからか
    Combobox.Items.Clear()も使えないようです。
    よろしくお願いいたします。

    ComboDataList.txtの中身は
    AA,ああああああ
    AA,かき氷
    AB,いいいいいい
    CC,あいうえお
    DD,テストデータ
    E,田中
    F,FIUEN水戸
    GEGE,まるまる

    のような感じでバラバラになってます。


    DataTable ComboData = new DataTable();

    private void SCLoad()
    {
    this.ComboData.Columns.Add("データ列");
    this.ComboData.Columns.Add("表示列");
    this.ComboData.Columns.Add("管理用");

    using (StreamReader sr = File.OpenText("Data/ComboDataList.txt"))
    {
    //内容を一行ずつ読み込む
    while (sr.Peek() > -1)
    {
    var SCName = sr.ReadLine();
    string[] words = SCName.Split(',');
    this.ComboData.Rows.Add(words[1], words[1],words[0]);
    }
    DataView dv = this.ComboData.DefaultView;
    Combobox1.DataSource = dv;
    Combobox1.DisplayMember = "表示列";
    Combobox1.ValueMember = "データ列";
    Combobox1.Text = "";
    }
    }



    public static string TextData;
    private void KankatuChange(object sender, EventArgs e)
    {

    var KanriData = KanriC.Text;//KanriCという名前のテキストボックス

    //コンボボックスのデータの更新の為
    DataView dv = this.ComboData.DefaultView;
    var prevText = Combobox1.Text;
    var prevIndex = Combobox1.SelectionStart;

    if (KankatuC.SelectedIndex == 0)
    {
    dv.RowFilter = "";
    }
    else
    {
    dv.RowFilter = $"管理用 LIKE '*{KanriData}*'";
    }
    Combobox1.Text = "";
    }


    //-----------別のフォーム
    public static List<UserData> _userData;

    private void DataList_Load(object sender, EventArgs e)
    {

    using (StreamReader sr = File.OpenText("Data/ComboDataList.txt"))
    {
    _userData = new List<UserData>();
    //内容を一行ずつ読み込む
    while (sr.Peek() > -1)
    {
    var TEST = sr.ReadLine();
    string[] words = TEST.Split(',');
    _userData.Add(new UserData() { Data = words[0], View = words[1] });
    }
    userDataBindingSource.DataSource = _userData;
    };
    }
マルチポストを報告
違反を報告
引用返信 削除キー/
■34905 / inTopicNo.2)  Re[1]: WinformでのDataGridView Comboboxのデータ追加削除が出来ない
□投稿者/ 魔界の仮面弁士 大御所(1397回)-(2021/09/08(Wed) 22:02:56)
  • アイコンNo34904に返信(たんとさんの記事)
    > Combobox.Items.Clear()も使えないようです。

    .Items.Clear(); したいのであれば、.DataSource は用いずに、
     .Items.Add( 行データ );
    形式で割り当てるようにしてください。

    DataSource プロパティを使っている場合は、
    .Items[0] = newItem; や
    .Items.Clear(); や
    .Items.Add(data); は使えない仕様です。

    DataSource を使っている時は、Items 経由では読み取りしかできないので、編集するには
    DataSource に割り当てた時のデータソースインスタンス(今回は dv 変数)を操作することになります。


    なお割り当てているデータソースインスタンスによっては、
    データ刷新時に、その結果が直ちに ComboBox に反映されません。

    その場合は、変更通知機構をもつクラス経由で割り当てるようにするか
    同じインスタンスを使わず、新しいデータソースインスタンスを割り当てるようにするか、
    あるいは、DataSource を一旦別の値にしてから再セットすることで反映されます。

     object src = comboBox1.DataSource;
     comboBox1.DataSource = null; // 別のデータソースにしておいて
     comboBox1.DataSource = src; // 改めてセットしなおす



    > DataGridViewを利用しているからか
    > Combobox.Items.Clear()も使えないようです。

    DataGridView と ComboBox の関係性が分かりません。

    コード中にある Combobox1 というのは、
    System.Windows.Forms.ComboBox クラスのことですよね?

    あるいは、DataGridView の コンボボックス列 (DataGridViewComboBoxColumn クラス)のことを仰っていますか?
    もしくは列全体ではなく、セル単位のコンボボックス (DataGridViewComboBoxCell クラス) のことでしょうか?


    それと少しだけ気になっているのが、提示されたソース内のコントロール名。

    C# だと、初期コントロール名は、先頭だけ大文字の "Combobox1" ではなく、
    "comboBox1" になるはずなので、その点で微妙に違和感があるのですよね。
    もちろん、意図的に Combobox1 と名付けることはできますが、
    自分でつけた名前にしては、名前に意図が込められてなさ過ぎますし…。
違反を報告
引用返信 削除キー/
■34906 / inTopicNo.3)  Re[2]: WinformでのDataGridView Comboboxのデータ追加削除が出来ない
□投稿者/ たんと 一般人(2回)-(2021/09/09(Thu) 08:49:59)
  • アイコン魔界の仮面弁士様

    回答ありがとうございます。
    データソースは一旦外して再度適用すれば
    問題なさそうとのこと分かりました。
    データソースを一旦外し、テキストファイルを読み込み
    コンボボックスに値を適用すればいけそうな気がしています。試してみます。


    DataGridViewとComboboxの関係について説明します。
    Form1とForm2があり、
    Form1にはコンボボックスとテキストボックス
    Form2にはDataGridViewがあります。

    Form2のDataGridViewのDataSourceは、userDataBindingSource
    public static List<UserData> _userData; という
    Form1とも共有できたら良いと思い、念のためグローバル変数?でList化してます。

    やりたいこととしましては、
    Form1のコンボボックス選択肢をForm2のDataGridViewと
    同期させたいというところでした。

    私が理解していないからか、とても面倒な作業をしているのだと思います。
    もっといい手段がありそうですが、思いつかず
    昨日1日中探しましたがこれが限界でした…。
    とりあえず、Datasourceの参照しなおしとコンボボックス用の変数修正を検討します!
    良い方法があれば、アドバイスお願いします。
    たぶん面倒な事を何度も実施しているように思えるので…。すみません。

    Combobox1となっているのは、掲載用にまとめて置換したからでした。
    元々は別の名前でしたが、あまり見せたくない名称だったため変更しています。

    '-------------
    Form1

    コンボボックスの表示/参照値として、ComboDataList.txtの
    2列目(UserDataで言うところのTitle)の値を参照させる。

    また、フィルター用に管理用columnを用意し、
    1列目(UserDataで言うところのData)の値を参照させる。


    '-------------------------------------
    Form2

    コンボボックスの内容追加用としての画面がForm2
    「保存」ボタンがあり、ボタンをを押すと、
    ComboDataList.txtに上書き保存する。

    public static List<UserData> _userData; 

    private void DataList_Load(object sender, EventArgs e)
    {

    using (StreamReader sr = File.OpenText("Data/ComboDataList.txt"))
    {
    _userData = new List<UserData>();
    //内容を一行ずつ読み込む
    while (sr.Peek() > -1)
    {
    var TEST= sr.ReadLine();
    string[] words = TEST.Split(',');
    _userData.Add(new UserData() { Title = words[0], Data = words[1] });
    }

    userDataBindingSource.DataSource = _userData;
    };
    }

    '-------------------------------------
    UserData.cs

    public class UserData
    {

    public string Title { get; set; }
    public string Data { get; set; }

    }
違反を報告
引用返信 削除キー/
■34909 / inTopicNo.4)  Re[3]: WinformでのDataGridView Comboboxのデータ追加削除が出来ない
□投稿者/ たんと 一般人(3回)-(2021/09/09(Thu) 14:14:57)
  • アイコンいろいろと大変そうな感じがしたため、
    アプリ自体を落として再起動することにしました。
解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -