asp.net gridview を使用して、mdb ファイルのデータのリストを表示しています。5 つの列が表示され、約 240 行のデータがあります。各行には、「名」、「姓」、「タイトル」、「ジャンル」、「号」、および「id」が表示されます。
各「タイトル」エントリには、対応する .aspx ページがあります。グリッドの「タイトル」エントリに対応する実際の .aspx ページは約 180 あります。この関係の例は次のようになります。aspx ページは /alongstory.aspx の場合があります。
達成したいこと: ユーザーがグリッドのタイトル フィールドをクリックして、対応する .aspx ページを開くことができるようにします。
これまでに行ったこと: 「タイトル」フィールドに aspLabel を作成しました - Text='<%#Eval("Title") %>'; ラベル読み込みイベントの C# コードを追加しました。
aspLabel l = sender as aspLabel;
l.ClientsideEvents.Click = String.Format("function(s,e) {{window.location = \"{0}"; }}, GetPageUrl(l));
GetPageUrl:
Private string GetPageUrl(aspLabel l)
{GridViewDataItemTemplateContainer c = l.NamingContainer as GridViewDataItemTemplateContainer:
var value = (string)DataBinder.Eval(c.DataItem, "Title");
string result;
switch (value) {
case "in the mirror":
result = "AnotherTitlePage.aspx";
break;
case "When your Eyes":
result = "AnotherTitlePage2.aspx";
break;
case "Her Delivery":
result = "ATitlePage1.aspx";
break;
case "You Never Know What You Might See":
result = "TitlePage3.aspx";
break;
default:
result = "TitlePageDoesNotHavesameNameAsDBEntry.aspx";
break;
}
return Page.ResolveUrl(result);
}
これは機能しますが、すべてのタイトルを、対応する URL とともに対応する select ステートメントにハード コードする必要があります。これは 240 ケースに相当します。さらに、各行を一意に識別する唯一のフィールドは「id」値です。これは整数です。int のケース選択を設定して適切な URL を返すのに問題がありました (キャスト エラーが問題です)。
私が達成したいこと:グリッド列のフィールド名とケース選択へのURLの両方をハードコーディングせずに、グリッドビューの「タイトル」フィールドをクリックして対応するURLを開く最も効率的な方法を見つけてください。
では、上記の情報を踏まえると、ケース セレクトはこの要件に最適なアプローチでしょうか? より良いアプローチの例や提案をいただければ幸いです。