• 締切済み

C#のDataGridViewにCheckBox

VC#2013でソフトを作成しています. xmlに保存したデータをform上のdataGridViewに表示させたいと考えています. xmlのデータは下記のようになります. <?xml version="1.0" standalone="yes"?> <setting> <test> <No>1</No> <直径>43.1</直径> <全長>43.2</全長> <可>true</可> </test> </setting> xmlを読み込んでfrom上のdataGridViewに表示させるコードは下記のようになります. setting.ReadXml(Directory.GetCurrentDirectory() + "\\setting.xml"); dataGridView1.DataSource = setting; dataGridView1.DataMember = "test"; 上記コードを実行し、<可>の列だけ、checkBoxにしたいと考えていますが、 trueと表示されてしまいます. 多分ですが、string型であるからだと思いますが、どのようにすればcheckBoxを表示することが出来ますでしょうか? 何卒、ご教授宜しく御願い致します.

みんなの回答

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>setting.ReadXml(Directory.GetCurrentDirectory() + "\\setting.xml"); のsettingは何者ですか? DataTable?DataSet? DataTableならコラムはどのように作っているのでしょうか? TestData.Columns.Add("No", Type.GetType("System.Int16")); TestData.Columns.Add("直径", Type.GetType("System.Double")); TestData.Columns.Add("全長", Type.GetType("System.Double")); TestData.Columns.Add("可", Type.GetType("System.Boolean")); として作成し、下記のXMLを読み込んだ場合にはDataGridViewCheckBoxになっていましたけど。 <?xml version="1.0" standalone="yes"?> <DocumentElement> <test> <No>1</No> <直径>43.1</直径> <全長>43.2</全長> <可>true</可> </test> <test> <No>2</No> <直径>50</直径> <全長>22.5</全長> <可>false</可> </test> </DocumentElement> DataTable.DataSourceで指定する場合にDataGridViewComboBoxにする方法は…不明です。

関連するQ&A

  • Excel VBA CheckBoxの漏れ防止

    CheckBoxのチェック漏れ防止方法で現在以下のコードで実行しています。 CheckBox1~7つあり、1つも選択していない場合は、メッセージを出す仕組みです。 Private Sub CommandButton1_Click() If CheckBox1 = True Or CheckBox2 = True Or CheckBox3 = True Or CheckBox4 = True Or _ CheckBox5 = True Or CheckBox6 = True Or CheckBox7 = True Then MsgBox "OK" Else MsgBox "必ず一つ以上選択してください。" End If End Sub 今は、CheckBoxが7つだけなのですが、今後20個ぐらいに増える予定です。 For~Nextで試してみたのですが、メッセージがチェックした分だけ表示を繰り返してしまいました。 今まで通り、Orでつなげても良いのすが、もう少しコードをコンパクトにする方法を探しているのですが、なかなか見つかりません。 ご教授をお願いします。

  • DataGridViewのセルに改行して表示

    VB2005、Access2003で開発しています。よろしくお願いします。 DataGridViewのセルに改行表示をしたいと思い、色々試したのですがうまくいきません。 データテーブル 日付  コード  数量 10/1    1     3 10/2    2     10 DataGridViewには、ひとつのセルに「コード」と「数量」のデータを並べて表示してるんですが、わかりにくいので、「数量」のデータを改行して表示したいと思っています。 色々と調べて試したのですが、うまくいきません。 WrapModeをTrueにしたら、改行できるみたいなことはわかったのですが、そのまま表示されてしまいます。 コードにSQL文を書いてDataGridViewに表示させているのですが、SQL文に何か足さなくてはならないのでしょうか? テーブル1.コード&'('&テーブル1.数量&')',''))As … と現在は()に数量を表示させてるんですが、セルに「1(3)」と表示されてしまいます。 どなたか教えてください。よろしくお願いします。

  • perlでcheckboxがうまく整理できない

    perl5.8でFormから送られてきたデータを取得し、整理しています。 FormはPOSTでperlに送り、データを整理したのですが、checkboxで複数のデータを送ったとき、うまく処理されていません。 Formのあるページも同じperlでcgiページを作り、エラーがあった場合、エラーメッセージ付きで再度そのcgiページを表示するようにしています。 次の内容で、@noにcheckboxで選択した番号が入るようにしています。 valueには - が余分にありますが、これは試しにcheckboxで複数選択してデータをsubmitしてみたところ、受け取り先の$in{no}で番号が連続して1つのスカラーで連なるので、番号を後に分割するために-を入れ、受け取り後、@no = split(/-/, $in{no});でばらして@noに番号を格納してあります $r_noは別のデータから受け取った比較先の番号です Formのcheckboxの部分は(実際はこれを複数回ループして$r_noが変化します) my $checkbox; foreach my $l (@no){ my $i = 0; if($l == $r_no){ $i = 1; } if($l == $r_no){ $checkbox = "<input type=\"checkbox\" name=\"no\" value=\"$r_no-\" checked>"; last; }else{ $checkbox = "<input type=\"checkbox\" name=\"no\" value=\"$r_no-\">"; } } print "$checkbox"; 2つ以上checkboxを選択して、わざとエラーが出るように他の部分を間違った選択をするようにして試してみたところ、@noには選択した分だけの番号が格納されているにもかかわらず、 if($l == $r_no){ の部分が真になるのは1つ目の@noとの真偽だけで、2つ目以降は本来真になるべき比較でも偽になってしまいます。 改行コードなどが入っているのかと思い、chompで後ろを削ったり、$l =~ s/\r?\n/K/g; $l =~ s/\r/K/g;で改行コードを可視化して確認してみましたが、それらしきものも入っていませんでした @noには選択した番号全てが収納されていますし、後ろに改行コードなど不要なものも入ってないのに真偽の分岐がうまくいかない原因は何にあるのでしょうか? 思い当たるものは一通り試したのですが、どうしてもわかりません。 「これが原因かも?」みたいな可能性だけでも結構ですので教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • C# .NET DataGridView の行を追加するとデータが消える。

    すぐ下に先ほど書いた質問がありますが、こちらに難点か追記してあります。下の質問は後ほど消します。(何でか、今現在消せないそうなので。) 環境 WindowsXP SP2 VisualStudio.NET 2005 C# テストプログラムで、こんなコードを書きました。 private void button1_Click(object sender, EventArgs e) { int iMaxCnt; dataGridView1.Rows.Add(1); iMaxCnt = dataGridView1.RowCount ; dataGridView1.EndEdit(); dataGridView1.Rows[iMaxCnt-1].Cells[0].Value = "たちつてと"; dataGridView1.Rows[iMaxCnt-1].Cells[1].Value = "なにぬめの"; dataGridView1.Rows[iMaxCnt-1].Cells[2].Value = "はひふへほ"; dataGridView1.EndEdit(); } ボタンのクリックイベントなので、これを何度か実行すると、DataGridView の一番下の行だけにデータが表示されてしまいます。(以前のボタン押下時に記入されたデータが消えてしまい、データの変更が確定されていないように見えます。) なぜなんでしょう?

  • DataGridViewがクラッシュする

    VB2005を使用しています。 DataGridViewコントロールで、以下のようなコードを実行した際に、 DataGridViewコントロール自体が大きな赤い×の表示になることがあります。 (必ず発生するわけではありません。) 'クリア DataGridView1.Columns.Clear() 'DataSetをDataGridViewに格納 DataGridView1.DataSource = dtData '空の列を追加する DataGridView1.Columns.Add("NOP", "") '最終列の幅をFillにする DataGridView1.Columns("NOP").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill '編集不可にする For i = 0 To DataGridView1.Columns.Count - 1 DataGridView1.Columns(i).ReadOnly = True Next i '行幅は変更できないようにする DataGridView1.AllowUserToResizeRows = False '行Headerを非表示にする DataGridView1.RowHeadersVisible = False 'セルの選択方法は行毎にする DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect '1行のみ選択にする DataGridView1.MultiSelect = False '追加行は表示しない DataGridView1.AllowUserToAddRows = False '列幅を自動リサイズさせる DataGridView1.AutoResizeColumns() 'DataGridViewのフォントサイズを変更する DataGridView1.Font = New Font(DataGridView1.Font.Name, 11) '行高さを自動リサイズさせる DataGridView1.AutoResizeRows() 'Headerのアライメントを中央にする DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 同時に、次のメッセージボックスが表示されます。 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。 [続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。 [終了]をクリックすると、アプリケーションは直ちに終了します。 オブジェクト参照がオブジェクトインスタンスに設定されていません。」 どうすればこのような現象を回避することができるのでしょうか? どうかご教授ください。

  • dataGridViewの値取得遅延について

    vc++でdataGridViewの第1列にcheckBoxを設け、チェックの有無を取得しようとしています。 コードは、 for(int i = 0; i < totalLineNumber; i++){ Debug::Print("{0}", dataGridView1->Rows[i]->Cells[0]->Value->ToString()); } です。 ところが、チェックを変更しながら繰り返し実行すると、最後の変更が反映さずに、1アクション前の状態が帰ってきてしまいます。例えば、上から順に1つずつチェックを増やして、そのたびに実行すると、上から4行にチェックを入れた段階では、上から3行がTrueを返し、4行目以降がFalseを返すといった具合です。現在のチェックの状態を遅れなしに取得するには、どうすれば良いのでしょうか。

  • DataGridView 複数選択で行番号の取得

    Visual Basic 2008 を使っています。 DataGridViewで複数の行を選択したとき、それぞれが何行目なのかを取得するにはどうしたらいいでしょうか? 具体的には、複数選択されている行の0列目の値をテキストボックスに表示するという動作を行いたいです。 自分で書いたコードをペーストしておきます。 Dim count As Integer = Me.DataGridView1.SelectedRows.Count For count = 0 To count - 1 Dim test As String test = Me.DataGridView1.Rows(?何行目か).Cells(0).Value Me.TextBox4.Text = test & "が選択されています。" & vbCrLf & zenkai Dim zenkai As String = Me.TextBox1.Text Next

  • DataGridViewの列スタイルについて

    開発環境  VB.NET  SQLServer2008 DataGridViewにDBから取得したデータを一覧表示させようと思っています。 テキストボックスの列、チェックボックス、コンボボックスの列を 追加させることはできたのですが、同一列に異なる種類のコントロールを 配置するということはできるのでしょうか? 例えば・・・ -------------- 行No |列1 -------------- 1   |□ -------------- 2   |□▼ -------------- ・行No1、列1のセルはチェックボックスのセルを表示する ・行No2、列1のセルはコンボボックスのセルを表示する 列を追加しているコードは以下の通りです。 Form_Load時に実行しています。 ------------------------------------------------------------- Private Sub initializeDgvTest() Dim dgv As DataGridView = Me.dgvTest dgv.Columns.Clear() dgv.AutoGenerateColumns = False Dim colLabel As New DataGridViewTextBoxColumn() colLabel.DataPropertyName = "LABEL" colLabel.Name = "LABEL" colLabel.HeaderText = "ラベル" dgv.Columns.Add(colLabel) Dim colVal As New DataGridViewCheckBoxColumn() colVal .DataPropertyName = "VALUE" colVal .Name = "VALUE" colVal .HeaderText = "値" dgv.Columns.Add(colVal ) End Sub ※データのバインドについて  DataTableをDataGridViewのDataSourceに設定しています。 ------------------------------------------------------------- 上記のコードでいうと、 「VALUE」列のコントロールの種類をセル単位で変更しようとしています。 何かいい方法がありましたら、アドバイスよろしくお願いします。 以上です。

  • DataGridViewの再表示方法

    VB2005、SQLServer2005環境です。 FormA、FormBの2つのフォームがあり、FormAはDataGridViewでデータを表示し、 FormBはFormAで選択されたデータを呼び出し修正処理を行っています。 質問は、FormBでデータを登録し、FormBを閉じたタイミングで、 FormAのDataGridViewを再描画して最新のデータを表示したいのですが、うまくいきません。 <FormAで記述しているCD> Private Sub BTN_Data表示ボタン_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BTN_Data表示ボタン.Click Dim strsql As String ' レコードを取得し、データグリッドに表示する '---DB接続 '---SQL文を作成して実行する strsql = "SELECT コード, 氏名 FROM TBLA ORDER BY コード Dim comm As SqlCommand = New SqlCommand(strsql, Con) '---データアダプタを生成 Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey '---データセット Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "TBLA") '---DataSet を DataGridView control と連結 dgrSyain.DataSource = ds dgrSyain.DataMember = "TBLA" '---DB切断 Call Disconnect() End Sub <FormBで記述しているCD> Private Sub BTN_更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_更新.Click '---FormBの内容を更新する処理----- Me.Close() End Sub 上記の、FormBが閉じる時のイベントで、ResetBindingsを使えばいいのかと思いましたが どこにどう記述すればよいかわかりませんでした。 どうすれば再描画できるでしょうか? ご教授ください。

  • VB2005 DataGridView で選択状態(青色反転)

    DataGridViewの件で質問したいのですが。 よろしくお願いします。 VB2005で、DataGridViewの特定のセルが選択されて値が青色反転した Selectイベントのような状態にしたいのですが。 例えば、下のようなDataGtridViewがあったとして, 例 ------------------ |ID | X | Y | ------------------ |001| 100 | | ------------------ |002| 150 | | ------------------ |003| 105 | | ------------------ ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを 表示させて、そのセルを青色反転させる処理を作りたいのですが。下の行のセルに 移動してしまいます。 そこで下記のようなコードを書きました。 Private Sub DataTable1DataGridView_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataTable1DataGridView.CellValidating If e.ColumnIndex <> Me.DataTable1DataGridView.Columns("Y").Index Then Exit Sub If Me.DataTable1DataGridView("X", e.RowIndex).Value IsNot Nothing AndAlso _ Me.DataTable1DataGridView.EditingControl IsNot Nothing Then If Not Me.DataTable1DataGridView("X", e.RowIndex).Value.ToString.Equals(Me.DataTable1DataGridView.EditingControl.Text) Then MsgBox("X <> Y", MsgBoxStyle.OkOnly) Me.DataTable1DataGridView.BeginEdit(True) 'e.Cancel = True End If End If End Sub e.cancel = True だとセルにはとどまりますが。セルが選択状態にはなりません。 BeginEdit(True)を使うと下のセルが選択状態になります。 アドバイスいただけたら幸いです。よろしくお願い致します。 開発環境 VB2005 Visual Studio 2005 Standard Edition(SP1) Windows XP Pro SP2

専門家に質問してみよう