便利だけど、知らないと出来ないことが多すぎて、よく使っているけれど、いまだ全貌は見えずというのが正直なところ。
一列目のID列の情報を取得する
一例として、GridViewの一列目にID列があって、各行の右サイドにボタンを並べ、クリックするその行の編集画面に飛ぶような仕組みを考えます。その先の編集画面までつくらないといけないので、はっきり言って面倒ではありますが、閲覧と編集の役割を分けることができるのでGUI的にもメリットはあります。
取得したいBoundFieldが一番左にあることが前提です
ソースコード
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {
if (e.CommandName == "command") {
int rowIndex = Convert.ToInt16(e.CommandArgument);
GridView gridView = (GridView)e.CommandSource;
GridViewRow row = gridView.Rows[rowIndex];
string id = row.Cells[0].Text;
// そのあとの処理
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
e.Row.Cells[0].Visible = false; // 非表示にする場合
}
- ButtonFieldのCommandNameに設定した値が、e.CommandNameに対応します。各行にボタンが複数ある場合も判別できます。
- e.CommandArgumentでもって行の位置を取得して、Cells[0]で列を指定して情報を取得することができます。
- ID行を表示させたくないときは、RowDataBoundイベントでデータが渡ってからVisible=falseとすると非表示にできます。デフォルトからVisible=falseとかすると、データが渡らないまま、空データになりますのでご注意。
※
それでも、Cells[0]なんていう直接的な指定がずっと気持ち悪いです。
なんとかできないもんでしょうかね。
取得したいフィールドがTemplateFieldの場合
TemplateFieldに配置したコントロールの値を取得したいとします。
ソースコード
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {
if (e.CommandName == "command") {
int rowIndex = Convert.ToInt16(e.CommandArgument);
GridView gridView = (GridView)e.CommandSource;
GridViewRow row = gridView.Rows[rowIndex];
DropDownList dropDownList = (DropDownList)row.FindControl("dropDownList");
// そのあとの処理
}
}
- FindControlを使用して、TemplateField内のコントロール名を指定することで、指定したコントロールが取得できます。ソース上ではDropDownListです。
0 件のコメント :
コメントを投稿