.NETでWinFormアプリをC#で製作中です。
Visual Studio Community 2017を使用しています。
添付の図のようにDataGridViewコントロールに、DataTableをバインドして表示させています。
私が今やりたいのは「新しく行を追加したらその行を選択状態にしたい」というものです。
添付の図は「点数」列ヘッダーをクリックして昇順ソート状態になっています。
この状態で新しく行を追加すると、表示上ソートが反映された状態で適切な追加に行が追加されるため、一瞬どこに追加されたのか分かりません。なので選択状態にしたいのです。
しかし、その方法を検索して調べてはみましたが、うまく見つけることができませんでした。
自分で考えてみたのは
① DataTableに登録した順に0から番号を割り振っていく "No" という名前の列を用意
② 新しく列を追加したら RowsCount() で列数をカウント
③ カウントした番号を ”No” 列の値に設定
④ "No" 列がその値の行を選択する
‥という感じならいけるのかな?と考えてみました。
しかし具体的な記述が分かりません。
例えばこちらのように入力しても、この場合はただ最後の行が選択されるだけです。
int i = RowsCount();
dgv.Rows[i].Selected = true;
(ちなみにSelectedよりもCurrentの方が良いのでしょうか?)
「DataTableに最後に追加した行をDataGridView上で選択する」にはどう記述すれば良いのでしょうか?
お分かりになる方いらっしゃいましたら、ぜひアドバイスをお願いします。m(_ _)m
No.2ベストアンサー
- 回答日時:
>>しかし新たに追加した列のユニークな値を見つけたとして、その行を選択する方法がなかなか見つからず‥
データにユニークな値があれば、Grid内のデータをサーチして、見つかった行に対して、Selected = tureを設定すればいいだけでしょう。
>>特にVisual Studioのデザイナを使ってDataSet、DataTableを作成してDataGridViewにバインドした場合でどう記述したら良いのかで詰まっています。。
まあ、私も昔、このあたりの処理が参考になる情報をネットで探したのですが、よい情報をみつけることができませんでした。
それで、以下の書籍を購入して勉強しました。
・C#によるコンポーネントプログラム 瀬尾佳孝 オーム社 2,800円
・プログラミングADO.NET 2.0 マイクロソフト公式解説書 日経BP 8,500円
特に後者のマニュアルは、大いに参考になりました。高い分厚い本は、値段に比例して役だち度が上がるようです。
>>FormアプリでDataGridViewを使ったデータベース入門みたいな本があれば喜んで飛び付くのですが。。
それは、後者の書籍が役にたちますが、前者の書籍でも、そういう目的に沿った内容だと思います。
ただし、前者の発行年は平成15年と、15年くらいも前の書籍です。
後者も発行年をみると、2007年で10年以上前・・・。
最近のEntityFrameworkじゃあなく、DataTableやDataAdapterを使ってデータ処理を行っているので、現時点からみたら悲しいですね。
>>しかし、今やりたいことに到達するまでにこれらを学んでいけば到達するのか、それはどの段階で到達するのか‥が分からずもやもやしています(^^
確かに、そういうことを独学で学ぶのは難しいですね。
私の場合は、派遣プログラマをやっているので、実際に使われている業務アプリのソースに使われているテクニックから学んだりしています。
ただ、最近の仕事で扱うC#のアプリはデスクトップじゃあなく、ASP.NET MVCなど、Web系のHTMLやJavaScript等を使ったものばかりみたいです。
そして、Web系の開発経験が少ない私は、知らないことが多くて、泥縄的ですが、仕事しながら、参考となる本買って勉強して、なんとか追いついているって感じです。
>>今の目的としてはちょっとしたDataGridViewを使ったアプリを作りたいだけなので、DataGridViewやDataTable周りのプロパティやメソッドをひたすら調べていった方が速いのでしょうか。。
振り返ってみれば、私が実際にDataGridViewを使ってアプリを作った時、用意されているDataGridViewの機能だけでは足りなくて、DataGridViewの長いソースコードを追いかけて、どうすれば欲しい機能が追加できるのか?ってのを調べたものでした。
DataGridViewを使う場合、なかなか欲しい機能が無いってことも多いんですよね。
だから、企業は速く開発を進めるため、高価なグレープシティのGirdViewを購入してアプリ開発を行うことが多いみたいです。
だから、独力でやっていたら、そんなに速い開発はできないと思います。
ただ、現在のDataGridViewなら、もっと使いやすくなっているのかもしれません。
ちなみに、最近はコンピュータ関連の日本語翻訳書籍はあまり売れないそうです。
それに比例して、ネット上の日本語ドキュメントもいまいち状態だったりします。
最新技術を仕入れたければ、本家マイクロソフトの英文ドキュメントを読むのが一番正確で、分りやすい状況なのかもしれません。
私は、ASP.NET MVCについては、ネットで日本語の情報を読んでも、よくわからないので、マイクロソフトの英文ドキュメント読んで学びました。
>データにユニークな値があれば、Grid内のデータをサーチして、見つかった行に対して、Selected = tureを設定すればいいだけでしょう。
あ、DataTableの値にこだわらなくともDataGridViewの値を探すのでいけますね‥
下記のように記述してやりたいことができました!
// 追加した行を選択する
for (int i = 0; i < count; i++) // No列の値を先頭行から順に検索
{
string s = this.dgv.Rows[i].Cells[0].Value.ToString();
int iResult = int.Parse(s);
if (count == iResult)
{
dgv.Rows[i].Selected = true;
}
}
>ただ、最近の仕事で扱うC#のアプリはデスクトップじゃあなく、ASP.NET MVCなど、Web系のHTMLやJavaScript等を使ったものばかりみたいです。
ふむむ、そうなのですね。
確かに私も業務ではスタンドアローンのアプリよりもウェブベースのものを使うことが多いです。
>ただし、前者の発行年は平成15年と、15年くらいも前の書籍です。
>後者も発行年をみると、2007年で10年以上前・・・。
WindowsFormも、それでこそLINQなんかもなんだかんだで結構年数が経つみたいですね。。
しかし今やっていることにピタリとマッチしている感じですので、チェックしたいと思います!
>DataGridViewを使う場合、なかなか欲しい機能が無いってことも多いんですよね。
Formのコントロールでやりたいと思ったら標準機能として用意されていなことが多いですが、WPFに手を出してみようとして「これは厳しい」と思ってすぐまたFormに戻りました。。
>最新技術を仕入れたければ、本家マイクロソフトの英文ドキュメントを読むのが一番正確で、分りやすい状況なのかもしれません。
ググると Stack Overflow という海外サイトがよく引っ掛かりますが、海外の方が質問や議論も多そうですね。英語は苦手ですが、そのあたりも克服していきたいところです。
色々と参考になります。 ありがとうございました!
No.1
- 回答日時:
なかなか苦労されているようですね。
まず理解すべきことは、DataTableはリレーショナル・データベース(以下RDB)のテーブルを扱うために作られたと思っています。
そしてテーブル設計時には、必ずユニーク・キーを割り当てておきます。
つまり、テーブルに含まれるデータは、運転免許証の番号やクレジットカードの番号のような、目的のデータを特定できる番号かIDを持たせておく必要があるのです。
そうしてあれば、新しく追加したデータがどれであったか、追加した時点でユニーク・キーを覚えておけば、そのデータが画面に表示されたとき、並べ替えられたとしても、そのデータを特定して、選択状態にできます。
ただ、この画面のデータ例では、田中さんに個人IDを001、鈴木さんに002などを振っても、教科ごとのデータがあるため、ユニーク・キーにはなりません。
この場合、データ登録を行ったとき、ユニークとなるように、
1)採番用のデータを他のテーブルに用意する
2)RDBの自動採番機能を利用する
3)国語に1、社会に2などの識別番号を割り当て、個人IDとつないで、ユニークになるようにする(複合キーの利用)
といった方法があります。
なお、RDBの自動採番機能を利用する場合には、新しくデータを追加する時点では、そのデータに何番が割り当てられるかは分かりません。
追加したデータに何番が割り当てられたか知るには、RDB固有の命令を使うことになるので、ちょっと難易度が上がったりします。
ちなみに、昔は、C#でDataTableを利用してDataGridViewを使うことが多かったと思います。
でも、マイクロソフトがEntityFrameworkやLinqという機能をRDBで使えるようにC#の仕様をバージョンアップ時に変更しました。
これらを使うと、DataTableを使うことは無くなって、しかもデータ処理が楽ちんになります。
ただし、EntityFrameworkやLinqがどんなものか?それをどう使えばいいのか?といったことを学ばないといけません。
もちろん、それ以前に「RDBとはどんなものか?それを使うには、どうすればいいか?テーブル設計はどうすべきか・・・」
などなど、楽をするためには、それ以前に沢山のことを学ぶ必要があったりするので、例にあるデータを処理するだけだと、「牛刀をもって鶏を割く」のような感じになる気がちょっとしますけどね。
lv4uさん
とても丁寧にアドバイスいただいてありがとうございます!
なるほど、分かりやすい例えでしたので考え方としてはとても理解できました。
丁度私が頭の中で考えたこちらも‥
>① DataTableに登録した順に0から番号を割り振っていく "No" という名前の列を用意
>② 新しく列を追加したら RowsCount() で列数をカウント
>③ カウントした番号を ”No” 列の値に設定
>④ "No" 列がその値の行を選択する
「列を新たに追加してユニークな値を設定すれば良いのでは?」と考えたので、考え方は間違っていなかったのですね。
しかし新たに追加した列のユニークな値を見つけたとして、その行を選択する方法がなかなか見つからず‥
特にVisual Studioのデザイナを使ってDataSet、DataTableを作成してDataGridViewにバインドした場合でどう記述したら良いのかで詰まっています。。
フィルタ表示は「DataTableBindingSource.Filter = "列名 = 'A'";」のような感じでフィルタできることが先ほどようやく分かってぐったりしているところです。
趣味の独学でやっているのでなかなかキツイですね。
FormアプリでDataGridViewを使ったデータベース入門みたいな本があれば喜んで飛び付くのですが。。
それでも、最新はデータベースの基礎知識を学び始め、LINQを使ったソートやフィルタ、その際の記述を理解するためのラムダ式やデリゲートを少しずつ調べて覚えようとしているところです。
しかし、今やりたいことに到達するまでにこれらを学んでいけば到達するのか、それはどの段階で到達するのか‥が分からずもやもやしています(^^A
今の目的としてはちょっとしたDataGridViewを使ったアプリを作りたいだけなので、DataGridViewやDataTable周りのプロパティやメソッドをひたすら調べていった方が速いのでしょうか。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Excel(エクセル) エクセルでの行列の選択について 1 2022/06/01 17:01
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- その他(Microsoft Office) excel テーブル 4 2023/03/18 16:11
- その他(ブラウザ) Mycrosoft Edge の「コレクション」に、画像とテキストを追加したい 2 2022/05/28 11:10
- iPhone(アイフォーン) iPhone/iPadの標準メールアプリでのアカウント新規登録について pop/imap選択 1 2023/06/22 08:00
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
-
4
DataGridViewのセル編集完了後に値を設定するには
Visual Basic(VBA)
-
5
DataGridViewの内容をDBに反映する時
Visual Basic(VBA)
-
6
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
7
C# DataGridView のヘッダーセル中央揃え
C言語・C++・C#
-
8
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
9
DataGridViewの、選択されている行を取り出したい
Visual Basic(VBA)
-
10
DataTableに入っているデータを全てinsertしたい!(C#)
Microsoft ASP
-
11
DataGridView からの値取得に関して
Visual Basic(VBA)
-
12
別フォームから戻ったときのイベント
Visual Basic(VBA)
-
13
DataGridViewにてセル以外をクリックしたか判別
Visual Basic(VBA)
-
14
VB.NETでコンボボックスの1行目を空白にしたい
Visual Basic(VBA)
-
15
DataGridViewの各セル幅を自由に決め、その幅で固定したい
Visual Basic(VBA)
-
16
VB.NET2005 TextBox 高さ(Height) 変更
Visual Basic(VBA)
-
17
DataGridView 列ごとの入力制限
Visual Basic(VBA)
-
18
VBの「As String * 128」とは?
Visual Basic(VBA)
-
19
DataGridViewのフォーカス遷移について
Visual Basic(VBA)
-
20
VB.NET DataGridViewでIsNewRowが正しく判定されない
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
C# DataTableに最後に追加した...
-
「Nullの使い方が不正です」の...
-
VBAコンボボックスの内容が反映...
-
【C#】textBoxの指定行のデータ...
-
Web画面のTableから数字を取得...
-
VB6のMsFlexGridコントロールに...
-
COBOL数値転記の仕様
-
【VB.NET】Excelの最終行までの...
-
エクセルのマクロ コンボボッ...
-
VBAでアクセスDBからデータの取...
-
ExcelVBAで戻り値を返すには
-
【エクセルVBA】DBのデータをCSVに
-
VB2010で、選択した系列を最前...
-
エクセルのCSV読み込みについて
-
oo4oによるBLOBデータ取得
-
矩形グラフ(オシロやロジアナ...
-
VBとアクセスでSQL文に変...
-
VBA 変数名に変数を使用したい。
-
エクセルでXY座標に並べられた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
【C#】textBoxの指定行のデータ...
-
VBAでアクセスDBからデータの取...
-
VBAコンボボックスの内容が反映...
-
C# DataTableに最後に追加した...
-
COBOL数値転記の仕様
-
「Nullの使い方が不正です」の...
-
ListViewで表示されたデータの...
-
アクセスでウェブ上のデータを...
-
クリスタルレポートでレコード...
-
非同期のプロセス間通信(パイプ...
-
【ExcelVBA】値を変更しながら...
-
MSFlexGrid 行選択状態
-
【VB.NET】Excelの最終行までの...
-
Excel VBA で日付を4ケタの数値...
-
エクセルのCSV読み込みについて
-
エクセルVBA WEBからデータ取...
-
Excel VBAでグループ毎に集計す...
-
Excel VBAで1週間毎にカテゴリ...
-
【エクセルVBA】DBのデータをCSVに
おすすめ情報