• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C# DataGridView列カスタマイズ)

C#でDataGridViewの列にNumericUpDownにしたい

このQ&Aのポイント
  • C#でDataGridViewの列にNumericUpDownをカスタマイズする方法について説明します。
  • DataGridViewのセルのフォーマットされた値に間違った型が指定されている場合の例外を回避する方法について教えてください。
  • DataGridViewのデザイン画面で列を追加し、NumericUpDownを使用してセルの値を変更する際に生じる例外についての対処法を教えてください。

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

  • ベストアンサー
回答No.1

NumericUpDownCell の ParseFormattedValue をオーバーライドしてやればよいと思います。 デフォルトだと public override object ParseFormattedValue(object formattedValue, DataGridViewCellStyle cellStyle, System.ComponentModel.TypeConverter formattedValueTypeConverter, System.ComponentModel.TypeConverter valueTypeConverter) { return base.ParseFormattedValue(formattedValue, cellStyle, formattedValueTypeConverter, valueTypeConverter); } のようになると思いますが、とりあえず、 return base.ParseFormattedValue(formattedValue.ToString(), cellStyle, formattedValueTypeConverter, valueTypeConverter); のようにすると例外は回避できると思います。

dodoemon
質問者

お礼

ありがとう。謎がとけました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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# refで渡すようにオブジェクトで渡したい

    こんにちは。c#初心者です。 以下のコードで、 ValueChanging(this, ref Sample, ref value); と、しているところを ValueChanging(this, e)のようにひとつのオブジェクトにまとめて同じ結果にするようなことはできるのでしょうか? わかる方いらっしゃいましたら教えてください。 もし、無理なら無理と言っていただけるとありがたいです。 -------------------------------------------------------- //イベント類 public delegate void ValueChangingHandler(object sender, ref oldValue, ref newValue); public event ValueChangingHandler ValueChanging; //フィールド&プロパティ protected int Sample; public int Value { get { return Sample; } set { ValueChanging(this, ref Sample, ref value); } } --------------------------------------------------------

  • データグリッドビュー数字と小数点は入力可能

    VB2010にて、データグリッドビューを編集不可にしています。 数字と小数点は入力可能にしたいのですが、 下記のコードを実行すると、 1キーを押すと49と表示されます。 どうしたら、キー値を表示できるようになるのでしょうか? ご存知の方教えてください。よろしくお願いします。 Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown '数字と小数点は入力可能 If e.KeyCode >= Keys.D0 And e.KeyCode <= Keys.D9 Or e.KeyCode >= Keys.NumPad0 And e.KeyCode <= Keys.NumPad9 Or e.KeyCode = Keys.Decimal Or e.KeyCode = 190 Then e.Handled = True strTemp = Me.DataGridView1(Me.DataGridView1.SelectedCells(0).ColumnIndex, Me.DataGridView1.SelectedCells(0).RowIndex).Value strTemp = strTemp & e.KeyValue Me.DataGridView1(Me.DataGridView1.SelectedCells(0).ColumnIndex, Me.DataGridView1.SelectedCells(0).RowIndex).Value = strTemp End If 'バックスペース機能追加 If e.KeyCode >= Keys.Back Then e.Handled = True strTemp = Me.DataGridView1(Me.DataGridView1.SelectedCells(0).ColumnIndex, Me.DataGridView1.SelectedCells(0).RowIndex).Value If strTemp = "" Then Exit Sub strTemp = Microsoft.VisualBasic.Left(strTemp, Len(strTemp) - 1) Me.DataGridView1(Me.DataGridView1.SelectedCells(0).ColumnIndex, Me.DataGridView1.SelectedCells(0).RowIndex).Value = strTemp End If If e.Control And e.KeyCode = Keys.V Then 'Ctrl+V押下時は貼付 DGV.Paste(DataGridView1) ElseIf e.KeyCode = Keys.Delete Then 'Delete押下時は削除 DGV.Delete(DataGridView1) End If End Sub

  • DataGridViewの特定のセルで選択状態を保ちたい VB2005

    DataGridViewの件で質問したいのですが。 よろしくお願いします。 VB2005で、DataGridViewの特定のセルでカーソルがとどまる(選択状態)ようにしたいのですが 思ったように動いてくれません。例えば、下のようなDataGtridViewがあったとして, 例 ------------------ |ID | X | Y | ------------------ |001| 100 | | ------------------ |002| 150 | | ------------------ |003| 105 | | ------------------ ID が002の行で、Y列のセルにカーソルが入りXと違う数を入力したら、メッセージを 表示させて、そのセルにカーソルがとどまる処理を作りたいのですが。下の行のセルに 移動してしまいます。  DataGridView_CellEndEditイベントやDataGridView1_CellValueChangedなどで カーソルがとどまる処理をしているつもりなのです下の行に移動してしまいます。 DataGridViewの初期設定の問題でしょうか? Private Sub DataGridView1_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged Dim DgvRow As Integer '行をセット DgvRow = e.RowIndex ' X と Yが異なれば、メッセージ表示 If DataGridView1("X", e.RowIndex).Value <> DataGridView1("Y", e.RowIndex).Value Then MsgBox("X <> Y", MsgBoxStyle.OkOnly) Me.DataGridView1.CurrentCell = Me.DataGridView1("Y", DgvRow) ' これも駄目だった ↓ 'Me.DataGridView1.CurrentCell = Me.DataGridView1("Y", e.RowIndex - 1) End If End Sub アドバイスいただけたら幸いです。よろしくお願い致します。 開発環境 VB2005 Visual Studio 2005 Standard Edition(SP1) Windows XP Pro SP2

  • C言語への変換について

    VBで、下記のnCrを求めるプログラムを作りました。 これを、C言語にて、なるべく近い格好で移植したいと思いました。 いろいろなサイトを駆け回ってみましたが、なかなかよいものに巡り会えませんでした。 ですので、教えていただけませんでしょうか。 できれば、サンプルも。 Public Class Form1 Dim n, r, nr, kazu As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "nCrの計算" Label1.Text = "n" Label2.Text = "C" Label3.Text = "r" Label4.Text = "=" Label5.Text = "" Button1.Text = "計算" Button2.Text = "リセット" Label6.Text = "nの値と、rの値を入力し、計算をクリックしてください。" & Chr(13) & "すると計算結果が表示されます。" Label7.Text = "" End Sub Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged n = NumericUpDown1.Value nr = n - r Label5.Text = "" Label7.Text = "" End Sub Private Sub NumericUpDown2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown2.ValueChanged r = NumericUpDown2.Value nr = n - r Label5.Text = "" Label7.Text = "" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kazu = nkaijyou(n) / rkaijyou(r) Label5.Text = kazu nr = n - r Label7.Text = n & "C" & r & Space(1) & "=" & Space(1) & kazu End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click kazu = 0 Label5.Text = "" n = 0 r = 0 nr = 0 NumericUpDown1.Value = 1 NumericUpDown2.Value = 1 End Sub Function nkaijyou(ByVal n) If n <= nr Then Return 1 Return n * nkaijyou(n - 1) End Function Function rkaijyou(ByVal r) If r < 2 Then Return 1 Return r * rkaijyou(r - 1) End Function End Class

  • datagridviewでたまに例外・・

    モジュールからフォームの関数を呼び出し時にたまに以下の例外が発生しており、 なぜ例外が発生するのか原因がわからず困っています。 オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 System.Windows.Forms.DataGridViewIntLinkedList.Remove(Int32 integer) 場所 System.Windows.Forms.DataGridView.SetSelectedRowCore(Int32 rowIndex, Boolean selected) 場所 System.Windows.Forms.DataGridView.ClearSelection() 場所 System.Windows.Forms.DataGridView.set_SelectionMode(DataGridViewSelectionMode value) 以下のようなフォームがありgridset()はタイマーで動いているモジュールの関数より呼び出されます。 Public Class frmTest Private Sub frmTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load gFrmTest = Me End Sub Public Function gridset() dataGridView1.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect ☆例外発生箇所    ・    ・ End Function End Class Module Modtest //以下はタイマーで何回も呼ばれる関数 Public Function aaa() As Integer gfrmTest.gridset() End Function End Module 環境はvb.net 2008です。 ご教示いただけますと助かります。 よろしくお願いします。

  • Equalsはどこから呼出してるのでしょうか?

    wpfの次のpublic override int GetHashCode()とpublic override bool Equals(object obj)とpublic override string ToString()にブレークポイントを設定し「開始」をすると起動時にEqualsで中断、コンボボックスをクリックするとToStringやGetHashCodeで中断しますが、これらの呼び出し元はどこなのでしょうか? 何卒、ご教授よろしくお願いします。 mainwindow.xaml <Grid> <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="200,138,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{x:Static local:classA.comblist}"/> </Grid> mainwindow.xaml.cs public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } class classA { public static classB[] comblist { get { classB[] List = new classB[3]; classB a1 = new classB(); a1.listb = "AAA"; List[0] = a1; classB a2 = new classB(); a2.listb = "BBB"; List[1] = a2; classB a3 = new classB(); a3.listb = "CCC"; List[2] = a3; return List; } } } class classB { private string _listb; public string listb { get { return _listb; } set { _listb = value; } } public override int GetHashCode() { return 1; } public override bool Equals(object obj) { return false; } public override string ToString() { return listb; } } ※長々と書き込みすいません、コード自体に意味はございません

  • C# コードの意味を教えてください

    C#の勉強をはじめたところです。 以下のコードの ”ここが不明” とかいてあるところの意味を教えてください。  x => x.FilePath == pathこの意味が特に分かりません。 /////////////////////////// bool DoesNeedBackup(List<FileAndTime> fileAndTimes, string[] folderPaths, string[] filePaths) { if(fileAndTimes.Count != folderPaths.Length + filePaths.Length) return true; bool doesNeed = false; foreach(string path in filePaths) { FileAndTime fileAndTime = fileAndTimes.FirstOrDefault(x => x.FilePath == path);←ここが不明 ・   ・   ・ } クラスの定義 public class FileAndTime { public FileAndTime(string path, long tick) { FilePath = path; Tick = tick; } public long Tick { get; protected set; } = 0; public string FilePath { get; protected set; } = ""; public bool IsChecked { get; set; } = false; }

  • 1回だけ変数の宣言や初期化をする方法は?

    VisualStudio2010を使いC#で以下のコードを書いてます。 bool flag = true; //※ private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) {   Rectangle rect = new Rectangle(); //※   if (e.RowIndex < 0 || e.ColumnIndex < 0)    return;    if (e.ColumnIndex == 0)      {       DataGridViewCell Cell = dataGridView1[e.ColumnIndex, e.RowIndex];          if (flag)             {             rect = e.CellBounds;             flag = false;             }           else            {             rect.Height += Cell.Size.Height;             }     } } CellPaintingのような繰り返される処理でflagやrect(※印)のような変数をCellPaintingのブロック内でかつ、一回だけ変数の宣言や初期化を行う方法はありますか? ちなみに、このコードは最初のセルの位置とその他のセル高さの合計をrectに設定しようとしてますが、これ自体にはあまり意味はありません。 何卒、よろしくお願いします。

  • VB.NETで出来てC#で出来ない???

    VB.NETでは出来るのにC#で同じようにするやり方がわからなくて困っています。 VSのバージョンは2008です。 やりたいことは 『param.Item("AAA") = "111"』 このように書けるクラスを作りたいのですが、 VBで出来てC#では出来ないのでしょうか? イメージとしてはプロパティにメソッドをくっつけたようなクラス? C#ではこのように書くとエラーになります。 どのようにしたらいいでしょうか? public string Item(string Key) {  set { _param[Key] = value; } } VB Dim param As New Param() param.Item("AAA") = "111" ----Paramクラス---- Imports System.Text Public Class Param Private _Hash As New Hashtable Default Public Property Item(ByVal Key As String) As String Get Return _Hash(Key) End Get Set(ByVal value As String) _Hash(Key) = value End Set End Property End Class ---------

このQ&Aのポイント
  • 仲直り後の親友との気まずい関係を元に戻す方法を教えてください。
  • 質問者は親友との関係を元に戻したいと思っていますが、どうすれば良いでしょうか?
  • 親友と喧嘩してしまい、仲直り後の関係が以前のように戻らないため困っています。
回答を見る

専門家に質問してみよう