1

DataTableソースに関連付けられたDataGridViewがあります。表の要素のデータの中には、非表示のままにしておきたいGuidがあります。(参照用に内部的に使用されていますが、表示しないでください。)テーブルの作成に使用しているコードは次のとおりです。

private DataTable mEntities = new DataTable();
private System.Windows.Forms.DataGridView EntitiesGridView;

これらは他の場所で宣言されており、参照用にここに示しています。

private void BuildEntityTable()
{
    mEntityTable.Columns.Add("id", typeof(Guid));
    mEntityTable.Columns.Add("Name", typeof(string));
    ...  (some other columns)

    foreach (Foo foo in mEntities)
    {
        DataRow row = mEntityTable.NewRow();
        row["id"] = foo.id;
        row["Name"] = foo.Name;
        ...  (rest of data)
        mEntityTable.Rows.Add(row);
    }

    DataColumn[] entityKeys = new DataColumn[1];
    entityKeys[0] = entityTable.Columns["id"];
    mEntityTable.PrimaryKey = entityKeys;

    EntitiesGridView.DataSource = mEntityTable.DefaultView;

    EntitiesGridView.Columns["id"].visible = false;
}

ここまでは順調ですね。テーブルが作成され、表示される「id」列はありません。ただし、後でテーブルに新しいオブジェクトを追加すると、問題が発生します。コードはほとんど同じです:

void AddNewObject(object sender, MyArgs e)
{
    Foo foo = e.Foo;
    lock (mEntities)
    {
        mEntities.Add(foo);
    }
    lock (mEntityTable)
    {
        DataRow row = mEntityTable.NewRow();
        row["id"] = foo.id;
        row["Name"] = foo.Name;
        ...  (rest of data)
        mEntityTable.Rows.Add(row);
    }
}

何らかの理由で、これにより「id」列が返されます。EntitiesGridView.Columns["id"].visible = false;前のコードから行をコピーしようとしましたが、うまくいき ません。この時点以降、私が何もしなければ、その列は消えてしまいます。私が欠けているものの手がかりはありますか?

4

3 に答える 3

1

この行を書くだけ

datagridview1.Columns[0].visible = false;
于 2012-05-08T10:45:07.720 に答える
0

私もこの問題に遭遇しましたが、設計時にデータグリッドビューを変更してからプロジェクトを保存できることがわかりました。アプリケーションを実行してから、アプリケーションを終了します。デザイン フォームの dgv が自動的に表示を変更しました。フォームを閉じて再度開くと、最初に含めた/除外した列が返されていることがわかります。この修正に追加のコードは必要ありません。

于 2013-10-28T11:03:05.980 に答える