リンクボタンをプログラムでgridviewに追加できますか?
-
22-07-2019 - |
質問
私は運のない類似の質問をいくつか見てきました。私がしたいのは、特定のアイテムに対してリンクボタンを表示し、他のアイテムに対してハイパーリンクを表示するグリッドビューを作成することです。これは私が現在持っているコードです:
public void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
var data = (FileDirectoryInfo)e.Row.DataItem;
var img = new System.Web.UI.HtmlControls.HtmlImage();
if (data.Length == null)
{
img.Src = "/images/folder.jpg";
var lnk = new LinkButton();
lnk.ID = "lnkFolder";
lnk.Text = data.Name;
lnk.Command += new CommandEventHandler(changeFolder_OnCommand);
lnk.CommandArgument = data.Name;
e.Row.Cells[0].Controls.Add(lnk);
}
else
{
var lnk = new HyperLink();
lnk.Text = data.Name;
lnk.Target = "_blank";
lnk.NavigateUrl = getLink(data.Name);
e.Row.Cells[0].Controls.Add(lnk);
img.Src = "/images/file.jpg";
}
e.Row.Cells[0].Controls.AddAt(0, img);
}
}
最初のセルはTemplateFieldです。現在、すべてが正しく表示されますが、リンクボタンはCommandイベントハンドラーを発生させず、すべてのコントロールはポストバックで消えます。
アイデアはありますか
解決
ポストバック upon GridViewの再バインドを強制する必要があると思います。これにより、すべての動的コントロールが再作成され、それらのイベントハンドラーが再接続されます。これにより、ポストバック後の消失も防止できます。
IOW、ポストバック時にGridViewで DataBind()
を呼び出します。
他のヒント
これらをRow_Createdイベントに追加することもできます。その後、!PostBackチェックを取り消す必要はありません
ボタンを宣言的に作成し、(リテラルコントロールを使用して)宣言的にハイペンを作成し、データバインディング構文を使用して、必要に応じてコントロールのVisibleプロパティである可視性をtrueまたはfalseに設定します:
Visible='<%#((FileDirectoryInfo)Container.DataItem).Length == null) %>'
そのようなもの。
所属していません StackOverflow