C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.90100 の関連記事表示

<< 0 >>
■90100  DataTableから行を削除する方法
□投稿者/ やまびこ -(2019/02/08(Fri) 18:21:26)

    分類:[.NET 全般] 

    DataTableに1列、重複の無いデータが入っています。指定した文字列と合致する行をDataTableから削除したいです。

    DataTable dt = new DataTable();
    dt.Columns.Add("A");
    dt.Columns.Add("B");
    dt.Columns.Add("C");
    for (int i = 0; i < 5; i++)
    {
    DataRow dr = dt.NewRow();
    dr["A"] = "1";
    dr["B"] = "B" + i.ToString();
    dr["C"] = "C" + i.ToString();
    dt.Rows.Add(dr);
    }

    // 「A」列を削除
    dt.Columns.Remove("A");
    // 2行目を削除
    dt.Rows.RemoveAt(1);

    上記のようにremoveメソッドを使って行を消すことはわかりました。
    やりたいのは、指定した文字列と合致した行を消したいです。
    dt.Rows.Remove("C1");
    のような事ができないかと思っています。

    DataTableの上から下までForEachでまわして、合致しているデータがあれば、その行を消すといった処理方法しかないでしょうか?

    使用している環境はVisual Studio 2015, C#, Windows 10になります。
親記事 /過去ログ155より / 関連記事表示
削除チェック/

■90101  Re[1]: DataTableから行を削除する方法
□投稿者/ 魔界の仮面弁士 -(2019/02/08(Fri) 19:05:38)
    No90100 (やまびこ さん) に返信
    > DataTableに1列、重複の無いデータが入っています。指定した文字列と合致する行をDataTableから削除したいです。

    削除するなら、該当行の Delete メソッド
    除去するなら Rows.Remove / RemoveAt メソッド


    前者は行に対して「削除済み」マークを付けるものです。(DataRowState.Deleted)
    DataGridView にバインドして行削除したような場合は、この状態になります。
    削除済み行は、削除結果をデータベース等に反映させるために使われます。

    一方後者は、DataTable 上から完全に取り除きます。(DataRowState.Detached)
    前者の削除済み行に対して AcceptChanges メソッドを呼んだ場合も、後者の状態になります。


    > DataTableの上から下までForEachでまわして、合致しているデータがあれば、その行を消すといった処理方法しかないでしょうか?
    DataTable の PrimaryKey プロパティが設定されていれば、
    DataTable の .Rows.Find メソッドで検索できます。

    PrimaryKey が未設定、または PrimaryKey 以外の検索の場合には、
    DataTable の Select メソッドや DataView クラスの Filter プロパティを使えます。
    ただ、これらは検索式を文字列として記述しなければならないので、
    LINQ の where クエリ(または Where 拡張メソッド)で取得したほうが良いでしょう。
記事No.90100 のレス /過去ログ155より / 関連記事表示
削除チェック/

■90102  Re[2]: DataTableから行を削除する方法
□投稿者/ やまびこ -(2019/02/08(Fri) 20:07:20)
    魔界の仮面弁士さん

    ご回答ありがとうございます。やりたかった事が、下記のサイトのように2つのリストボックスがあり、
    片方から片方へとデータを移動させるということをやりたかったです。
    https://blog.trippyboy.com/2010/c/c%E3%80%80listbox%E3%80%80%E4%BB%96%E3%81%AElistbox%E3%81%B8%E3%81%AE%E7%A7%BB%E5%8B%95/


    ただ、ListBox1はDataTableをセットしています。
    ListBox1.DataSource = DataTable;
    ListBox1.DisplayMember = "ID";

    なので、DataTableからデータを削除する方法が知りたかったです。
    PrimaryKeyは設定していないので、LINQについて調べてみます(こちらは全くやったことがありません)。

    完全にDataTableから除去したいわけではないので、Delete メソッドを試してみます。
    ありがとうございます。
記事No.90100 のレス /過去ログ155より / 関連記事表示
削除チェック/

■90104  Re[3]: DataTableから行を削除する方法
□投稿者/ 魔界の仮面弁士 -(2019/02/08(Fri) 22:49:16)
    No90102 (やまびこ さん) に返信
    > 2つのリストボックスがあり、片方から片方へとデータを移動させる

    データバインドをお使いということであれば、
    それぞれの ListBox に別々の DataTable を用意して、行を移動させる方法と、
    両方の ListBox に同一の DataTable を共有させ、フィルターで絞り込む方法がありますね。


    private void Form1_Load(object sender, EventArgs e)
    {
     DataTable tbl = CreateSampleTable();

     tbl.Columns.Add("Selected", typeof(bool));
     listBox1.DataSource = new DataView(tbl, "ISNULL(Selected, false)=false", "", DataViewRowState.CurrentRows);
     listBox2.DataSource = new DataView(tbl, "ISNULL(Selected, false)=true", "", DataViewRowState.CurrentRows);
     listBox1.DisplayMember = listBox2.DisplayMember = "名前";

     MouseEventHandler MoveItem = (o, arg) =>
     {
      var rowView = ((ListBox)o).SelectedItem as DataRowView;
      if (rowView != null)
      {
       rowView.BeginEdit();
       rowView["Selected"] = (o == listBox1);
       rowView.EndEdit();
      }
     };
     listBox1.MouseDoubleClick += MoveItem;
     listBox2.MouseDoubleClick += MoveItem;
    }

    private static DataTable CreateSampleTable()
    {
     var tbl = new DataTable("果物");
     tbl.Columns.Add("名前");
     tbl.Rows.Add("麝香猫果");
     tbl.Rows.Add("無花果");
     tbl.Rows.Add("葡萄柚");
     tbl.Rows.Add("五歛子");
     tbl.Rows.Add("鰐梨");
     tbl.Rows.Add("鳳梨");
     tbl.Rows.Add("檸檬");
     tbl.Rows.Add("茘枝");
     tbl.AcceptChanges();
     return tbl;
    }
記事No.90100 のレス /過去ログ155より / 関連記事表示
削除チェック/

■90162  Re[4]: DataTableから行を削除する方法
□投稿者/ やまびこ -(2019/02/13(Wed) 11:06:00)
    ありがとうございます。DataTableを2つ作るという案を使用したいと思います。
記事No.90100 のレス / END /過去ログ155より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -