[ASP.NET][C#] データのIDを指定してそのデータがあるページでGridViewを開くのに試行錯誤した話
2008-11-11 00:42:22
最近やっとASP.NETを触りだしたんだけど、わからないことがやたら多くて困っている。
その1つが、タイトルにも書いたデータのIDを指定してそのデータがあるページでGridViewを開く方法がわからないというものなんだが・・・。
まず、GridViewでいきなり指定ページを開く方法だが、これはすぐにわかった。
GridViewを配置し、Page_Loadでページ番号を指定してみる。
この例だと、3ページ目が開かれる。
あとはQueryStringなどでページ番号を渡してやればOK。
protected void Page_Load(object sender, EventArgs e)
{
GridView1.PageIndex = 2;
}
不思議なのは、この後で画面上でページを切り替えてもちゃんと動くこと。
なんでここで指定したページに変わらないのかが謎。
ちゃんと勉強しないとわからんかも。
続いて、最初の目的であるIDを指定してそのIDを持つデータがあるページを開くようにしてみる。
やり方だけど、QueryStringで渡されたIDを持つデータを、1つずつ調べていくことにした。
(相当原始的な方法かも。スマートな方法があるのかもしれないけど、勉強してないのでよくわからない。)
試行錯誤した揚句、以下のようになった。
なんか無理やりという感じがするが他に思いつかない。
(IDが入っている列の位置はCellsのインデックスで指定。)
protected void GridView1_PreRender(object sender, EventArgs e)
{
string id = Request.QueryString["id"];
if (id != null)
{
string act = Request.Path;
int ind = act.LastIndexOf("/");
if (ind >= 0)
{
act = act.Substring(ind + 1);
form1.Action = act;
}
for (int i = 0; i < GridView1.PageCount; i++)
{
GridView1.PageIndex = i;
for (int j = 0; j < GridView1.Rows.Count; j++)
{
string tempid = GridView1.Rows[j].Cells[1].Text;
if (tempid.Equals(id))
{
return;
}
}
}
GridView1.PageIndex = 0;
}
}
注意しないといけないのは、先のPage_LoadでGridViewのデータを参照してみても値が入っていないというとこ。
GridView1のPreRenderイベントを割り当てて、そこで参照してやる必要がある。
(PageのPreRenderでもいいかも。)
あと、form1.actionを設定しているところがあるが、単にファイル名だけにしたかっただけ。
なんかasp.netになったら便利になると思っていたが、なんだかお約束が多くて大変だな~。
aspのがよかったかも。