- PR -

DataGridViewで特定の行を選択させるには

1
投稿者投稿内容
yem
常連さん
会議室デビュー日: 2008/01/05
投稿数: 37
投稿日時: 2008-01-07 00:33
Visual Studio 2005 でC#、SQL Server 2005 Express です。

DataTable Area の列には、
TEXT型[地域]、Int[地域ID]、TEXT[地名]、Int[地名ID]列があります。
[地域ID]、[地名ID]ともに一意の列です。
Area はORDER BY[地域ID]、[地名ID]となっています。

DataView dv = Tables["Area"].DefaultView;
DataGridView1.DataSource = dv;
です。

ここで、DataGridView1を[地域ID]、[地名ID]のままで、
ある特定の[地名ID]を選択したいのです。

dv.Sort = "地名ID";
としては、DataView dv が地域、地名順に並べられているので、
特定の行をDataGridView1 のCurrentCellとすることができません(ですよね?)。

かといって、
DataGridView1 のDataSourceが地域、地名順のtblでなく、dvであるので
dv.Sort = "地名ID"として検索結果をCurrentCellとすることもできません(ですよね?)。

一方、
DataTable tbl = new DataTable();
tbl = ds.Tables["Area"];
tbl.PrimaryKey = new DataColumn[] {
object[] objectCreteria = new object[] { 地域ID, 地名ID};
DataRow row = tbl.Rows.Find(objectCreteria);
としたところで、これを利用してDataGridViewで特定の行を選択させることもできず、
結局、どうすればよいのか途方に暮れている状態です。

要は、地域、地名順になっているDataGridView1で、特定の地名を選択させたいだけなのです。

わかりにくい質問で申し訳ありませんが、
こんな風な質問で、質問の内容を分かっていただけるでしょうか?

おわかりならば、ぜひご教授いただきたいのです。
yem
常連さん
会議室デビュー日: 2008/01/05
投稿数: 37
投稿日時: 2008-01-08 00:23
妙な質問で申し訳ありません。

行番号を取得できないDataViewを利用して、
DataGridViewのCurentCellで特定の行を選択しようとすること自体が
おかしいでしょうか?
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-01-08 01:51
行を選択するのに CurrentCell は確かにおかしいですね。

DataGridView.Rows から順次地域ID の Cell の値を取得して調べていけばいいんじゃないですか?
見つかったら DataGridViewRow.Selected を設定。
DataGridView のカラムから ID を削除している場合でも、DataGridViewRow.DataBoundItem で DataRowView が取得できます。

データソースに BindingSource を使えば Find 一発とかもできたりしますが。
yem
常連さん
会議室デビュー日: 2008/01/05
投稿数: 37
投稿日時: 2008-01-12 19:43
ありがとうございます。

「DataGridView.Rows から」順次しらべることで、
DataGridViewのCellを選択させることができました。
そういう方法があることが分かって安心しました。

が、欲を言えば、順次調べるのはなんだか遅いのを
我慢しているようで、ちと避けたいところです。

「データソースに BindingSource を使」
って、一発検索といきたいところですが、その方法については、
別途確かめてみようと思います。
1

スキルアップ/キャリアアップ(JOB@IT)