• ベストアンサー

VB2005のDataGridViewについて

プログラム側からはいろいろなセルに値を入力できて、 でも、ユーザー側からは行しか選択させない、かつ編集させないっていう方法ありますか? DataGridViewのSelectionModeをFullRowSelectにすると、 選択方法が行だけになるんですが、 入力もColumnIndexが0でないと、セルに値が入力できなくなってしまうんです。(つまり、1行につき1つのセルにしか入力できない) なんかいい方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

WindowsFromアプリケーションでしょうか? 1) DaraGridViewのスマートタグ内の『追加を有効にする』『編集を有効にする』『削除を有効にする』のチェックを外す 2) DataGridViewのReadOnlyプロパティを『True』に設定し AllowUserToAddRows、AllowUserToDeleteRowsを『False』に設定する どちらの方法でも同じ効果です

関連するQ&A

  • DataGridViewで列、行、セルの選択

    [環境] Windows7 Professional Visual Studio 2010 Professional お世話になります。 上記環境下にて、DataGridViewを用いたプログラムを 作っております。 そこで、タイトルの件なのですが DataGridViewの一番左(行ヘッダー)をクリックすると行選択、 一番上(列ヘッダー)をクリックすると列選択、 セルをクリックするとセル選択できるようにしたいと思っています。 しかし、DataGridViewのセル選択はSelectionModeという プロパティで制御しているようでして、以下の5種類の選択方法しかないようです。 (1) CellSelect 1 つ以上の個別のセルを選択できます。 (2) FullRowSelect 行のヘッダーまたは行内のセルをクリックすることによって行全体が選択されます。 (3) FullColumnSelect 列のヘッダーまたは列内のセルをクリックすることによって列全体が選択されます。 (4) RowHeaderSelect 行のヘッダー セルをクリックすることによって行が選択されます。個別のセルは、そのセルをクリックすることによって選択できます。 (5) ColumnHeaderSelect 列のヘッダー セルをクリックすることによって列が選択されます。個別のセルは、そのセルをクリックすることによって選択できます。 要するに、 (1)…セル選択のみ可能 (2)…行選択のみ可能(セルクリック時は行選択扱い) (3)…列選択のみ可能(セルクリック時は列選択扱い) (4)…行選択とセル選択のみ可能 (5)…列選択とセル選択のみ可能 ということなので、私の望む、 ・行選択と列選択とセル選択が可能 という制御は無理なのでしょうか。 ご存知の方いましたら、ご教示の程お願い致します。

  • VB.netのDataGridViewについて

    VB.netのDataGridViewについての質問です。 DataGridViewで出力された行を選択して、 その行の値をテキストボックスなどに出力させることは可能なのでしょうか? やりたいことは 1.データベースより取得してきたDatatableをDataGridViewに出力 2.出力されたDataGridViewの行を選択する 3.その選択された行の項目(複数)の値を画面上の個々の   テキストボックスなどに反映させる です

  • 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 同時に、次のメッセージボックスが表示されます。 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。 [続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。 [終了]をクリックすると、アプリケーションは直ちに終了します。 オブジェクト参照がオブジェクトインスタンスに設定されていません。」 どうすればこのような現象を回避することができるのでしょうか? どうかご教授ください。

  • VBのDATAGRIDVIEWについて

    環境VB.net 初心者です。教えていただきたのですが Datagridviewを使用しループ処理で全行の単価セル内に数字の0を追加したいのですが1行目のセルのみ値が追加されません。(2行以降は全て追加されます)コードは下記の通りです。 For CNT = 0 To マスタテーブルCNT マスタテーブルdatagridview("単価", CNT).Value = 0 Next ご教授お願いします。

  • VB2005 DataGridViewの編集不可項目にただちに入力する方法はありますか?

    vb2005で開発中です。 DataGridViewのセルが Me.DataGridView1.CurentCell.ReadOnly = True で、編集不可としています。その項目にカーソルがある状態で、入力を開始したら、編集可能となり、その値がただちに反映させる方法はありますでしょうか? ・なにかキーを一度押して(KeyPress)から、 Me.DataGridView1.CurentCell.ReadOnly = False にする方法ならば、簡単ですが、そのなにかキーを押す手間を省きたいです。 ・また、なぜ一度 Me.DataGridView1.CurentCell.ReadOnly = True の状態にしたいかというと、 Me.DataGridView1.CurentCell.ReadOnly = False Me.DataGridView1.BeginEdit(True) で、編集可能し、全体を選択した状態で、右矢印を押すと、文字の最後にカーソルが来てしまい、次のセルに移動しないからです。 つまり、やりたいことは、セル上にカーソルがある時、右矢印を押したら、右のセルに移動。また、セル上にカーソルがある時、直接入力したいのです。 他の方法でも何かいい方法がありましたら、お教え下さい。 よろしくお願いいたします。

  • VB2005 DataGridView CurrentCell.ColumnIndex

    VB2005です DataGridViewで + ヘッダ + 項目名1 + 項目名2 + 項目名3 + 項目名4 + 列の順序変更で + ヘッダ + 項目名3 + 項目名2 + 項目名4 + 項目名1 + とした場合 i = DataGridView1.CurrentCell.ColumnIndex Label1.Text = DataGridView1.Columns(i).HeaderText としてヘッダ項目名を取得できましたが、 For x=0 to DataGridView1.ColumnCount - 1 として、セルの左から順番に項目名を取得するにはいかがしたらよろしいでしょうか? コードでCurrentCellを移動する方法も合わせて教えて下さい。 また上記2行のコードをもっとスマートに書けないでしょうか?

  • DataGridViewのセルのItem設定につい

    DataGridView内にコンボボックスのカラムを設定しました。 下記のサイトを参考にしました。 http://dobon.net/vb/dotnet/datagridview/comboboxdropdownstyle.html 入力した内容をカラム単位ではなく、セル単位で追加したかったため、 CellValidatingメソッドを下記の通り一部変更しました。 //CellValidatingイベントハンドラ private void DataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { DataGridView dgv = (DataGridView)sender; //該当する列か調べる if (dgv.Columns[e.ColumnIndex].Name == "sComboColumn" && dgv.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn) { //DataGridViewComboBoxColumn cbc = // (DataGridViewComboBoxColumn)dgv.Columns[e.ColumnIndex]; // // ↓cellへ変更 // DataGridViewComboBoxCell cbc = (DataGridViewComboBoxCell)dgv.Rows[e.RowIndex].Cells[e.ColumnIndex]; //コンボボックスの項目に追加する if (!cbc.Items.Contains(e.FormattedValue)) { cbc.Items.Add(e.FormattedValue); } //セルの値を設定しないと、元に戻ってしまう dgv[e.ColumnIndex, e.RowIndex].Value = e.FormattedValue; } } コンボボックスに入力し、EnterやTabを押したタイミングでコンボボックスのリストに、 入力した文字列が追加されます。また、入力した文字列がセルに表示された状態になります。 しかし、その後同じセルに文字列を入力した場合、リストに文字列が追加されますが、 セルに表示される文字列はその前に入力された文字列のままです。 どのようにすれば入力後のセルの内容を設定できるかご存じの方がいれば ご教授いただきたいです。

  • DataGridViewのセル選択について

    VB2005でDataGridViewを用い、編集できるセルと編集できないセルを設けています。 編集できないセルは、セルの選択自体出来ないようにしたいのですが、 そのようなことは可能なのでしょうか? タブキーで移動した場合も、入力不可としているセルを飛ばして移動したいのです。 ぜひお教えください。 よろしくおねがいいたします。

  • 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

  • C# DataGridView特定セルの入力フォーム変更について

    C# DataGridView特定セルの入力フォーム変更について C# DataGridViewについての質問です。 DataGridViewで1列目のコンボボックスを選択した値によって、その行のみ 2列目の入力フォームを変更したいのですが、その様なことは可能でしょうか? 例.1行目1列目コンボボックス「a」選択時、1行目2列目コンボボックス表示   2行目1列目コンボボックス「b」選択時、2行目2列目テキストボックス表示   3行目1列目コンボボックス「c」選択時、3行目2列目チェックボックス表示 列全体の入力フォームを変更する処理なら分かるのですが、特定のセルのみ変更する 方法が分かりません。 もし可能であれば実現方法も教えて頂けると非常に助かります。 宜しくお願いします。

専門家に質問してみよう