VC++2008でNewRow()で作成した列にSystemIconsを定義したい

解決


powerball2602  2009-08-04 06:06:55  No: 70751

どうしても解決できず困っております、どなたかご教示いただけないでしょうか。

開発環境は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;

}


オショウ  2009-08-04 06:38:35  No: 70752

VC++ で.NET使える=C++/CLI ですね?!

直接的な回答ではありませんが・・・

http://dobon.net/vb/dotnet/datagridview/datagridviewimagecolumn.html
http://dobon.net/vb/dotnet/datagridview/showimageinintcolumn.html

この辺が参考になるのでは・・・

以上。


subaru  2009-08-04 07:00:47  No: 70753

CreateDataTable内で最初の列の定義が間違っているようです。

>wCol = gcnew DataColumn();
>wCol->ColumnName = "COL1";
>_gDT->Columns->Add(wCol);

_gDT->Columns->Add("COL1", System::Drawing::Icon::typeid);

だけでとりあえずは動くかと。


powerball2602  2009-08-04 08:32:56  No: 70754

オショウさん、subaruさん、アドバイスありがとうございました!!
最小の改修で対応したいので、subaruさんのアドバイスを参考にしたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加