2

ASP.NET 2.0 に次の列を含む DataGrid があります。

<ASP:TEMPLATECOLUMN>
    <ItemStyle HorizontalAlign="Right"></ItemStyle>         
    <ItemTemplate>
        <asp:HyperLink id="HyperLink1" runat="server" 
            CssClass="DataGridCommand" Target="_blank"
            NavigateUrl='<%# GetPreviewURL(DataBinder.Eval(Container, "DataItem.NodeID")) %>'>
        Preview Graphic
        </asp:HyperLink>
    </ItemTemplate>
</ASP:TEMPLATECOLUMN>   

したがって、基本的な考え方は、DataGrid の各行に、ポップアップ イメージ プレビュー (NodeID のデータ バインド列を参照) を起動するリンクを配置することです。これはうまくいきます。

関連する画像がない行のリンクを無効にしようとしています。これを行うには、これをコード ビハインドの Page_Load の下に配置します。

foreach (DataGridItem dgi in this.dgNode.Items)
{
    HyperLink myLink1 = (HyperLink)dgi.Cells[0].FindControl("HyperLink1");

    //myLink1.Visible = false;
    //if (condition for hiding links goes here...)
    myLink1.Enabled = false;
    this.dgNode.DataBind();
}

ご覧のとおり、visible プロパティを false に設定しようとしましたが、うまくいきませんでした。enable を false に設定しようとしましたが、うまくいきませんでした。そして、DataGrid のデータバインドを再度試みましたが、うまくいきません。リンクは引き続き正常に機能します。

これが機能しない理由、機能させるために何ができるか、根本的に欠陥がある場合は代替ソリューションを知っている人はいますか? 特定の行のリンクをグレー表示にするか、クリックできないように非表示にすることを検討しています。

4

4 に答える 4

2

次のように、 OnRowDataBoundイベントでこれを処理できます。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    HyperLink hl = (HyperLink)e.Row.FindControl("HyperLink1");
    hl.Visible = false;
}
于 2009-03-11T19:02:16.767 に答える
1

ページの読み込み時に項目をループする代わりに、イベント ハンドラーを追加して OnItemDataBound イベントを処理する必要があります。次に、各アイテムがバインドされているときに、そこでハイパーリンクを見つけて無効にすることができます。

リンクを非表示または無効に設定した後に DataBind() メソッドを呼び出すため、現在のソリューションは機能していないと思います。これにより、DataGrid が再構築され、今行った作業が消去されます。言うまでもなく、アイテムごとに DataGrid を再バインドするため、パフォーマンスが低下します。

于 2009-03-11T19:00:23.697 に答える
1

ハイパーリンクを無効にしてからデータグリッドをバインドしているので、再バインドは本質的に、データバインドコードを介してリンクを再度「再アクティブ化」することに賭けます。

別の方法として、DataGrid の ItemDatabound イベントを使用し、その時点でハイパーリンクを有効/無効にすることを考えましたか? すべてのデータがすぐに利用できるようになり、コードは現在とほとんど同じように見えます。

于 2009-03-11T19:01:55.487 に答える
0

確かではありませんが、オブジェクト Hyperlink1 のインスタンスが複数あるため、asp.net が急いでいると思います。IDプロパティは一意の識別子として使用されます.複数のインスタンスがある場合は、それを操作することを拒否する可能性があります.

于 2009-03-11T19:00:08.253 に答える