- PR -

DataGridの行の削除

1
投稿者投稿内容
未記入
会議室デビュー日: 2004/01/08
投稿数: 3
投稿日時: 2004-01-08 20:51

はじめまして。
現在VB.NETを勉強中ですが、ちょっとわからないことが出てきたので、
質問させてください。

DataGridに表示させたデータは行単位で削除できないのでしょうか?
ヘルプを見たところ列では消せるようなのですが。

ヘルプからの引用です。
Dim ColumnIndex As Integer = 1
' Remove the second column
Dim myGridColumns As GridColumnStylesCollection
myGridColumns = DataGrid1.TableStyles(0).GridColumnStyles
myGridColumns.RemoveAt(ColumnIndex)
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-09 15:36
諸農です。

引用:

未記入さんの書き込み (2004-01-08 20:51) より:

DataGridに表示させたデータは行単位で削除できないのでしょうか?
ヘルプを見たところ列では消せるようなのですが。



列を見えなくするということと、行を削除するということは
違うと思いますが。

あるデータテーブルからある条件に合致したデータ行を見えなくするようにするには、
DataViewのRowFilterを使えばいいと思います。

あるデータテーブルからある条件に合致したデータ行を削除するには、
DataTableのDataRowCollectionを使って条件に一致するデータロウを
探し出し、そのコレクションをRemove()した後にAcceptChanges()を
行うことになると思います。

ではでは(^^)/
_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
未記入
会議室デビュー日: 2004/01/08
投稿数: 3
投稿日時: 2004-01-12 14:45
諸農さん、はじめまして。
返事が遅くなってしまい申し訳ございません。

僕がやりたいのは、データテーブルからある条件に合致したデータ行を見えなくしたいのです。
諸農さんに教えていただいた、DataViewのRowFilterを使用してみたところ見えなくするようにできました。
ありがとうございます。

ただ、ここでまた問題が出てきてしまいました。
一度DataGridの行を見えなくさせてから、再度この処理を行った場合「指定されたキャストは有効ではありません」というエラーが出てしまうのです。
調べてみると、最初DataGridのDataSourceがDataSetであったのに、
見えなくさせる処理でDataSourceがDataViewに変わってしまったため
DataSetの宣言をしているところで起きてしまっているようです。
DataViewをDataSetに変換(?)するような事はできるのでしょうか?

ソースはこのようになっています。

(VB.NET)
[DataView]

Dim ds As DataSet = CType(DataGrid1.DataSet) '2回目以降ここでエラー
Dim data_view As DataView

data_view = New DataView(ds.Tables(DataGrid1.DataMember), "column=1","",
DataViewRowState.CurrentRows)
DataGrid1.DataSource = data_view

Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-12 16:42
諸農です。

引用:

未記入さんの書き込み (2004-01-12 14:45) より:

調べてみると、最初DataGridのDataSourceがDataSetであったのに、
見えなくさせる処理でDataSourceがDataViewに変わってしまったため
DataSetの宣言をしているところで起きてしまっているようです。
DataViewをDataSetに変換(?)するような事はできるのでしょうか?



DataGridのDataSourceに最初からDataViewをセットしておけば解決できると思います。

C#で申し訳ないですが、サンプルです。
Col3の項目値が、TextBoxコントロールに入力された数値と同じ値を持つものを
非表示にしています。

コード:
private void Form1_Load(object sender, System.EventArgs e)
{
    textBox1.Text = "";

    DataTable t = new DataTable("Sample");
    t.Columns.Add("Col1",typeof(string));
    t.Columns.Add("Col2",typeof(string));
    t.Columns.Add("Col3",typeof(int));
    int i = 0;
    DataRow r;
    while (i < 10)
    {
        r = t.NewRow();
        r["Col1"] = 5.ToString();
        r["Col2"] = i.ToString();
        r["Col3"] = i * 3;
        t.Rows.Add(r);
        i++;
    }

    DataView dv = new DataView(t);
    dataGrid1.DataSource = dv;
}

private void button1_Click(object sender, System.EventArgs e)
{
    try
    {
        int i = Int32.Parse(textBox1.Text);
        DataView dv = (DataView)dataGrid1.DataSource;

        //Col3の項目を対象にフィルタリングしています。
        dv.RowFilter = "Col3 <> " + i.ToString();
    }
    catch
    {
        errorProvider1.SetError(textBox1,"数値を入力してください");
        textBox1.SelectAll();
        textBox1.Focus();
    }
}

private void textBox1_Validating(
              object sender, System.ComponentModel.CancelEventArgs e)
{
    try
    {
        Int32.Parse(textBox1.Text);
        errorProvider1.SetError(textBox1,"");
    }
    catch
    {
        errorProvider1.SetError(textBox1,"数値を入力してください");
        textBox1.SelectAll();
        e.Cancel = true;
    }
}




ではでは(^^)/

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
未記入
会議室デビュー日: 2004/01/08
投稿数: 3
投稿日時: 2004-01-13 10:10
諸農さん、ありがとうございました。
無事できるようになりました。
1

スキルアップ/キャリアアップ(JOB@IT)