私はC#で小さなアプリを持っています、それは使用して満たされるDataGridViewを持っています:
grid.DataSource = MyDatasource array;
MyClassは列の構造を保持し、次のようになります。
class MyDatasource
{
private string column1;
private string column2;
public MyDatasource(string arg1, string arg2)
{
this.column1 = arg1;
this.column2 = arg2;
}
public string column1
{
get
{
return this.column1;
}
set
{
this.column1 = value;
}
}
public string column2
{
get
{
return this.column2;
}
set
{
this.column1 = value;
}
}
}
すべてが正常に機能し、DataGridViewに正しいデータが入力されますが、ここでcolumn2を非表示にします。列宣言の上に[Browsable(false)]
を追加しようとしましたが、それは非表示になりますが、コードから列値にアクセスする必要もあり、[Browsable(false)]
を使用してコンテンツを読み取ろうとすると、列が存在しない場合。使用しない場合、問題なく列を読み取ることができますが、DataGridViewに表示されます。
列を非表示にしながら、コードからコンテンツを読み取ることができる方法はありますか?
場合によっては、最初に列をDataGridViewに追加してから非表示にするのは悪い考えかもしれません。
たとえば、会社のロゴのImageプロパティのNHibernateプロキシを持つクラスがあります。そのプロパティにアクセスした場合(たとえば、ToGridメソッドを呼び出してDataGridViewで表示する場合)、SQLサーバーから画像をダウンロードします。 Companyオブジェクトのリストがあり、それをそのようなDataGridViewのdataSourceとして使用した場合、列を非表示にする前にすべてのロゴがダウンロードされると思われます。
これを防ぐために、カスタム属性を使用しました
[System.ComponentModel.Browsable(false)]
imageプロパティで、DataGridViewがプロパティを無視するようにします(列を作成せず、ToStringメソッドを呼び出しません)。
public class Company
{
...
[System.ComponentModel.Browsable(false)]
virtual public MyImageClass Logo { get; set;}
データソースではなく、グリッドビューコントロールで列を非表示にする必要があります。データソースで非表示にすると、グリッドビューにはまったく表示されないため、グリッドビューの値にアクセスできなくなります。提案されている方法で行うと、グリッドビューではなく、データソースを介して列の値にアクセスする必要があります。
グリッドビューコントロールの列を非表示にするには、次のようなコードを使用できます。
dataGridView1.Columns[0].Visible = false;
データソースから列にアクセスするには、次のようなものを試すことができます。
object colValue = ((DataTable)dataGridView.DataSource).Rows[dataSetIndex]["ColumnName"];
プログラム的に使用すると、panel1.Controls.Add(dataGridView);
then dataGridView.Columns["ID"].Visible = false;
はフォーム全体を破壊して空白にします。そのため、このAFTER EGを設定するラウンドを実行するには:
panel1.Controls.Add(dataGridView);
dataGridView.Columns["ID"].Visible = false;
//works
dataGridView.Columns["ID"].Visible = false;
panel1.Controls.Add(dataGridView);
//fails miserably
遅すぎるかどうかはわかりませんが、問題は、実行時にバインドしている場合はデザインモードで列を設定できないことです。したがって、実行時にバインドしている場合は、デザインモードから列を削除して実用的にする
例.
if (dt.Rows.Count > 0)
{
dataGridViewProjects.DataSource = dt;
dataGridViewProjects.Columns["Title"].Width = 300;
dataGridViewProjects.Columns["ID"].Visible = false;
}
その特定の列のVisible
プロパティ= false
を設定します
dataGridView[ColumnName or Index].Visible = false;
編集Columns
プロパティdataGridView.Columns[ColumnName or Index].Visible = false;
同じ問題があった
解決策は次のとおりです。それは私のために働いた
GridView1.DataBind();
if (GridView1.Columns.Count > 0)
GridView1.Columns[0].Visible = false;
else
{
GridView1.HeaderRow.Cells[0].Visible = false;
foreach (GridViewRow gvr in GridView1.Rows)
{
gvr.Cells[0].Visible = false;
}
}
DataGridView.AutoGenerateColumns = false
;
右上隅の矢印(datagridview
内)をクリックして列を追加する必要があり、DataPropertyName
でクラスにプロパティの名前を入力する必要があります。
次に、datagridview
で列を定義した後、datagridview.datasource = myClassViewModel
。