VisualStudio2010の質問で古き良きエリー。
データグリッドビューにチェックボックスだけの列があり、ユーザーが特にチェックを外さない限り、チェックされているように表示したいと思います。私が見つけた唯一のことは、それが単なるスタンドアロンのチェックボックスであるかどうかをチェックする方法です。
助けてくれてありがとう!
エリー
VisualStudio2010の質問で古き良きエリー。
データグリッドビューにチェックボックスだけの列があり、ユーザーが特にチェックを外さない限り、チェックされているように表示したいと思います。私が見つけた唯一のことは、それが単なるスタンドアロンのチェックボックスであるかどうかをチェックする方法です。
助けてくれてありがとう!
エリー
各行をループし、それぞれのボックスをチェックして、(デフォルトで) チェックされているように表示します。
次のようになります。
foreach (DataGridViewRow row in dataGridView.Rows)
{
row.Cells[CheckBoxColumn.Name].Value = true;
}
DataGridView をコレクションにバインドする場合は、オブジェクトの boolean プロパティのデフォルト値を true に設定し、オブジェクトを BindingList コレクションに追加して、コレクションを DataGridView のデータ ソースに設定できます。
たとえば、DataGridView にバインドするコレクションには、必要なプロパティ (列を表す各プロパティ) が含まれ、チェックボックス列を表すブール型プロパティが含まれます。クラスがどのように見えるかの例を次に示します。
public class Product : INotifyPropertyChanged
{
private bool _selected;
private string _product;
public event PropertyChangedEventHandler PropertyChanged;
public Product(string product)
{
_selected = true;
_product = product;
}
public bool Selected
{
get { return _selected; }
set
{
_selected = value;
this.NotifyPropertyChanged("Selected");
}
}
public string ProductName
{
get { return _product; }
set
{
_product = value;
this.NotifyPropertyChanged("Product");
}
}
private void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
DataGridView を含むフォーム内で、項目を BindingList に追加し、そのコレクションを DataGridView にバインドできます。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitGrid();
}
private void InitGrid()
{
dgProducts.AutoGenerateColumns = true;
BindingList<Product> products = new BindingList<Product>();
products.Add(new Product("Eggs"));
products.Add(new Product("Milk"));
products.Add(new Product("Bread"));
products.Add(new Product("Butter"));
dgProducts.DataSource = products;
}
}
これは簡単な例ですが、オブジェクトに既定値を設定し、そのオブジェクトを BindingList に追加してから、DataGridView に追加する方法を示しています。
リストがバインドされた後にアイテムを追加するには、いつでも DataSource コレクションにアクセスして追加することができます (以下のサンプル コードでは、ボタンがフォームに追加され、以下に示すクリック イベントに接続されていること、および newItemName という名前のテキスト ボックスが接続されていることを前提としています) ):
private void addItemButton_Click(object sender, EventArgs e)
{
BindingList<Product> products = dgProducts.DataSource as BindingList<Product>;
products.Add(new Product(newItemName.Text));
}