DataGridViewに空白がある場合はエラーにしたい
- VB2005とAccess2005で開発しているプログラマーが、Form上のDataGridViewに空白がある場合にエラーを返す方法を知りたい。
- DataGridViewにおいて、列の一番右端の入力が終わり、次の新しい行に移動する前に、入力が終わった行に空白のセルがあればエラーを表示する方法を教えてほしい。
- 参考サイトにあるDataGridViewを継承したユーザーコントロールを使用しているプログラマーが、一番右端の列の入力が終わったときにどのような処理を行えば良いかわからない。
- ベストアンサー
DataGridViewに空白がある場合はエラーにしたい
よろしくお願いします。VB2005とAccess2005で開発しています。 Form上にDataGridViewを配置しています。 列の一番右端の入力をし終えて、次の新しい行に移動する前に、入力し終えた行に空白のセルがあったらエラーを返したい(空白があります、メッセージを表示したい)のですが、どのような処理を書いたらよいのかわからず悩んでいます。 ちなみにこのDataGridViewはエンターキーで横移動するようなDataGridViewを継承したユーザーコントロールです。 参考サイト→http://www.vbstation.net/tips/inherits_control.htm 一番右端の列を入力し終えたときにどのような処理を行えば良いか教えてください。
- nanacyanyo
- お礼率93% (46/49)
- Visual Basic
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
下の様な関数を用意してみてはいかがでしょうか 最もセル内の空白は削除するコードも追加しなくてはいけないかもしれませんが・・・ Const COLUMN As Integer = XXXX '列数 Private Function CheckDGV(ByVal i As Integer) As Boolean For j As Integer = 0 To COLUMN If (DataGridView1(i, j).Value.ToString = "") Then Return False End If Next Return True End Function End Class
関連するQ&A
- DataGridViewのRowsにメソッド追加
VB2013で、DataGridViewのRowsコレクションに独自のメソッドを追加することは可能でしょうか。 Inherits System.Windows.Forms.DataGridViewで継承してメソッドを追加するだけでは DataGridView.XXXといった形式になってしまうので・・・。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- VB2010のDataGridViewについて
VB初心者です。 VisualBasic2010のDataGridViewの表示についての質問です。 DataGridViewは通常、行単位でデータを管理する形式になっていますが、 行と列を逆にして操作したいのです。 古いバージョンのVBではコントロール右上のマークをクリックするとタスクが出てきてそこで設定できるようなのですが、VB2010ではタスクの中の操作がなくなっています。 もし、VB2010でも設定する方法があるのでしたら教えてください。 古いバージョンのVBで行と列の入れ換えを行っているサイトがあるので参考までに↓ http://d.hatena.ne.jp/Yamaki/20091214/1260767140
- ベストアンサー
- Visual Basic
- DataGridViewの入力内容をリアルタイムでTextBoxにコピーしたい
よろしくお願いします。 Vb2005+Access2003でWindowsアプリケーションを開発しています。 表題のとおりなんですが、DataGridViewの2列目にあるセルにテキストを入力したら、その入力中のテキストをTextBoxにも反映させたいと考えているのですが、そういったことはできるのでしょうか?方法がありましたら、教えてください。もしできなければ、エンターキーを押したらTextBoxに反映する、という方法でも良いと考えています。 キーボードから入力された内容をDataGridViewとTextBoxの二つのコントロールに同時に表示するということができるのかわからないので、変な質問をしてたらすみません!色々と調べてみたのですがよくわからないので投稿させていただきました。どうぞよろしくお願いします。
- ベストアンサー
- Visual Basic
- DataGridViewでコードで値を入力したい
VB2005のDataGridViewですが、行と列を指定して そのセルに値を入力したいと思いますが、どのプロ パティに行番号・列番号を入れればいいのでしょうか?
- ベストアンサー
- Visual Basic
- DataGridView 列ごとの入力制限
VB2005環境です。 DataGridViewコントロールの、列ごとに入力制限をかけたいと 思っています。 たとえば、1列目は数字のみ入力可能、2行目は半角英数字…と いった具合です。 また、できればある列にはIMEMODEを設定してやりたいとも 思っています。 KeyDownイベントで、列の名前ごとにif文をかまして、文字を弾けば いいかと思っていたのですが、思ったより手間で、コピペでの入力 には対応できません。 プロパティでなんとかならないかと思ったのですが、デザイナからは そのようなものは見つかりませんでした。 何かシンプルに入力制御をかけられる方法はないでしょうか? ご教授お願いいたします。
- ベストアンサー
- Visual Basic
- DataGridViewの行追加について。
初めまして、VB初心者ですが皆様よろしくお願いいたします。 今、VB2005でDataGridViewを使用した入力システムを作成しています。 1~10行目まで入力したデータに対して、5行目に新規行を追加したいのですが。 この場合、現在入力されている5~10行目のデータを、6~11行目に退避した後 「DataGridView1.Rows.Add(DataGridView1.Focus」で5行目に新規行を追加すればいいのでしょうか? うまくいかず悩んでいます。 ご教授よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- DataGridViewでMauseDown
VB.NETでDataGridViewでMauseDownイベントを実装するとCellContentClickイベントやCellClickイベントが発生しなくなりました。 VB.NETのバージョンは4.6.2です。 Panelコントロール上に配置したDataGridViewのCellContentClickイベント内でClickされたセルの列に応じた処理を行っています。 このDataGridViewにDrag&Dropの機能を設けるべく、MouseDownイベントを追加しました。 MouseDownイベント内に記述した処理の動作も問題無く、全体の動作確認を行っていると、DataGridViewのCellContentClickイベントが発生していない事に気がつきました。 CellContentClickイベント内の処理の1行目にブレークポイントを設置して確認しました。 試しにMouseDownイベント自体をコメントアウトするとCellContentClickイベント内の処理は実行されました。 MouseDownイベント、CellContentClickイベントの両方を動作させる方法はありますでしょうか?
- 締切済み
- Visual Basic
- DatagridViewの値確定
VB2005です。 DataGridViewを私用しています。 EditModeはEditOnEnterです。 特定のセルの値を変更し、カーソルがその列から移動していない状態で、 Buttonコントロールをクリックすると、ボタンクリック時のイベントの前に、 そのセルのCellValueChangedイベントが発生します。 が、同じ要にセルの値を変更し、カーソルがその列から移動していない状態で、 HScrollBarコントロールをクリックすと、CellValueChangedイベントが発生しません。 そうすると、変更した値が反映されず、前の値で処理が進んでしまいます。 HScrollBarコントロールをクリックしたときも、DataGridViewの値が 確定される方法はないでしょうか。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- DataGridViewについて
Fom1のDataGridViewから選択した行のデータをForm2のDataGridViewに渡し、Form2で編集しFom1に反映せると、どの行のデータも1行目に入ってしまいます。 どのようなコードで解決できますか? 【Form1】 private void DataGridView1_SelectedRowsDoubleClick(Object sender, MouseEventArgs e) { // Form2を作成し、親フォームとしてForm1を設定する Form2 f2 = new Form2(); f2.Owner = this; // 親フォームを設定 // 選択行のデータを渡す f2.SetRowData(dataGridView1.SelectedRows, dataGridView1); // Form2を表示する f2.Show(); } /// <summary> /// 選択行のデータを更新するメソッド public void UpdateSelectedRowData(int rowIndex, string editedData1, string editedData2, string editedData3) { // データソースが DataTable の場合のみ処理を実行する if (dataGridView1.DataSource is DataTable dt && dt.Rows.Count > rowIndex) { // データ行を取得する DataRow dataRow = dt.Rows[rowIndex]; // 編集データを新しいデータ行にセットする dataRow["date"] = editedData1; dataRow["name"] = editedData2; dataRow["week"] = editedData3; } } } } 【Form2】 public void SetRowData(DataGridViewSelectedRowCollection rows, DataGridView dataGridView) { //データテーブルの作成 DataTable dt = createData(); foreach (DataGridViewRow r in rows) { //1列目~3列目を取り出す string s1 = r.Cells[1].Value.ToString(); // 日付 string s2 = r.Cells[2].Value.ToString(); // 名前 string s3 = r.Cells[3].Value.ToString(); // 曜日 dt.Rows.Add("2023年", s1, s2, s3); //日付順に昇順に表示する dt.DefaultView.Sort = "日付 ASC"; } //一覧を表示する dataGridViewDisp2(dt); } // 編集後のデータを保持するためのプロパティ public string EditedData1 { get; set; } public string EditedData2 { get; set; } public string EditedData3 { get; set; } /// 更新ボタンの処理 private void savebtn_Click(object sender, EventArgs e) { // 親フォーム Form1 をForm1に指定する Form1 form1 = this.Owner as Form1; if (form1 != null) { // Form1のDataGridViewのデータソースを取得する DataTable dt = form1.dataGridView1.DataSource as DataTable; if (dt != null) { // dataGridView2の各行を処理する foreach (DataGridViewRow row in dataGridView2.Rows) { // 新規行はスキップする if (row.IsNewRow) continue; // 編集されたデータを取得する string editedData1 = row.Cells[1].Value.ToString(); string editedData2 = row.Cells[2].Value.ToString(); string editedData3 = row.Cells[3].Value.ToString(); // 選択された行のインデックスを取得する int rowIndex = row.Index; // 親フォーム Form1 の UpdateSelectedRowData メソッドを呼び出す form1.UpdateSelectedRowData(rowIndex, editedData1, editedData2, editedData3); } } } // 現在のフォームを閉じる this.Close(); } } }
- ベストアンサー
- C・C++・C#
- C#かVB DataGridView
C#かVB DataGridView DataGridView(1)に1~10までの列が、 DataGridView(2)に11~20までの列 DataGridView(3)に21~28までの列があるとして 今このまま画面にDataGridView3つ表示させると3つともにフォーカスが存在してると思うのですが これをフォーカスがあてているものにだけフォーカスを表示させるようにしたいのです。Enterを連打して1~28までいくようにしたいです。今10までいったらDataGridView (2)に20までいったらDataGridView(3)に移動させてますが各グリッドにフォーカスが残っていて 不自然です。おしえてください
- ベストアンサー
- Visual Basic
お礼
お礼が遅くなってすみません。回答ありがとうございました。 教えていただいたコードを実装してみたところ、なんとか動いてくれましたので、自分なりにアレンジして使用させていただこうと思います。 丁寧にコードを教えてくださってありがとうございました。勉強になりました。