どうしても解決できず困っております、どなたかご教示いただけないでしょうか。
開発環境はVC++ 2008 ExpressEdtion
OSはWindows Vista Home Premium 64bitです。
DataGridViewといくつかのテキストボックスとボタンを配置した画面で、あるボタン(btDataAdd)を
クリックした際に、名前と年齢と合わせてアイコン(SystemIcons::Asterisk)を登録したいと
思っています。
NewRow()で新規に列を作成して名前や年齢を定義するときに、合わせてアイコンを登録したいのですが、
どうすればよいのかわかりません。
処理としてはbtDataAdd_Click()の中で詰まっています・・・。
どなたかアドバイスをいただけないでしょうか。
よろしくお願いいたします。
以下、ソース
-----------------------------------------
public: DataTable^ _gDT;
private: System::Void Form1_Shown(System::Object^ sender, System::EventArgs^ e) {
DataGridInit();
}
private: System::Void DataGridInit(void){
dataGridView1->DataSource = nullptr;
dataGridView1->Rows->Clear();
dataGridView1->Columns->Clear();
dataGridView1->AutoGenerateColumns = false;
dataGridView1->ColumnHeadersVisible = true;
dataGridView1->RowHeadersVisible = true;
DataGridViewImageColumn^ col1 = gcnew DataGridViewImageColumn();
col1->DataPropertyName = "COL1";
col1->AutoSizeMode= DataGridViewAutoSizeColumnMode::AllCells;
col1->Name ="アイコン";
col1->ImageLayout = DataGridViewImageCellLayout::Zoom;
col1->ValuesAreIcons =false;
col1->Image = gcnew Bitmap("C:\\setup.bmp");
DataGridViewTextBoxColumn^ col2 = gcnew DataGridViewTextBoxColumn();
col2->DataPropertyName ="COL2";
col2->AutoSizeMode= DataGridViewAutoSizeColumnMode::AllCells;
col2->Name = "名前";
DataGridViewTextBoxColumn^ col3 = gcnew DataGridViewTextBoxColumn();
col3->DataPropertyName ="COL3";
col3->AutoSizeMode= DataGridViewAutoSizeColumnMode::AllCells;
col3->Name = "年齢";
DataGridViewTextBoxColumn^ col4 = gcnew DataGridViewTextBoxColumn();
col4->DataPropertyName ="COL4";
col4->AutoSizeMode= DataGridViewAutoSizeColumnMode::AllCells;
col4->Name = "性別";
array< DataGridViewColumn^ >^cols = {col1,col2,col3,col4};
dataGridView1->Columns->AddRange(cols);
for( int i = 0 ; i < dataGridView1->ColumnCount ; i++){
dataGridView1->Columns[i]->SortMode = DataGridViewColumnSortMode::NotSortable;
}
_gDT = gcnew DataTable("D_TABLE");
CreateDataTable();
}
private: System::Void CreateDataTable(void){
try{
DataColumn^ wCol;
wCol = gcnew DataColumn();
wCol->ColumnName = "COL1";
_gDT->Columns->Add(wCol);
wCol = gcnew DataColumn();
wCol->DataType = Type::GetType("System.String");
wCol->ColumnName = "COL2";
_gDT->Columns->Add(wCol);
wCol = gcnew DataColumn();
wCol->DataType = Type::GetType("System.Int32");
wCol->ColumnName = "COL3";
_gDT->Columns->Add(wCol);
wCol = gcnew DataColumn();
wCol->DataType = Type::GetType("System.Int32");
wCol->ColumnName = "COL4";
_gDT->Columns->Add(wCol);
}catch(Exception^ e){
MessageBox::Show(e->Message,"Error",MessageBoxButtons::OK,MessageBoxIcon::Warning);
}
}
private: System::Void btDataAdd_Click(System::Object^ sender, System::EventArgs^ e) {
DataRow^ row = _gDT->NewRow();
//ここで何とかIconを定義したい・・・。
row["COL1"] = System::Drawing::SystemIcons::Asterisk;
row["COL2"] = tbName->Text;
row["COL3"] = Convert::ToInt32(tbAge->Text);
row["COL4"] = 1;
_gDT->Rows->Add(row);
dataGridView1->DataSource = _gDT;
}
VC++ で.NET使える=C++/CLI ですね?!
直接的な回答ではありませんが・・・
http://dobon.net/vb/dotnet/datagridview/datagridviewimagecolumn.html
http://dobon.net/vb/dotnet/datagridview/showimageinintcolumn.html
この辺が参考になるのでは・・・
以上。
CreateDataTable内で最初の列の定義が間違っているようです。
>wCol = gcnew DataColumn();
>wCol->ColumnName = "COL1";
>_gDT->Columns->Add(wCol);
↓
_gDT->Columns->Add("COL1", System::Drawing::Icon::typeid);
だけでとりあえずは動くかと。
オショウさん、subaruさん、アドバイスありがとうございました!!
最小の改修で対応したいので、subaruさんのアドバイスを参考にしたいと思います。
ツイート | ![]() |