0

私はリピーターでこれをやろうとしています:

<%# Iif((int)DataBinder.Eval(Container.DataItem, "Id") == SelectedJobDefId, "blue", "red")%>

問題は、この構文が使用されている場合にのみメンバー プロパティが評価されることです。

<%= SelectedJobDefId %>

DataBinder.Eval() は、ハッシュ記号が使用されている場合にのみ機能します。

テストとして、私はこれを試しました:

  <%= SelectedJobDefId %>
  <%# DataBinder.Eval(Container.DataItem, "Id") + " " + SelectedJobDefId %>

行を切り替えても、最初の SelectedJobDefId は正しいままです (LinkBut​​ton イベント)。DataBinder 部分は各行で正しいです。SelectedJobDefId の 2 番目の出力は常に "1" です。

これら2つの値を比較するにはどうすればよいですか?

アップデート:

Jeremy の提案に基づいて、td をサーバー タグにし、次のように OnItemDataBound でロジックを実行しようとしました。

protected void Repeater2_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = e.Item;
        DataRowView drv = (DataRowView)item.DataItem;

        int id = (int)drv.Row.ItemArray[0];

        HtmlTableCell td = (HtmlTableCell)item.FindControl("failtd");

        if (id == this.SelectedJobDefId){td.BgColor = "green";}
    }

デバッガーをステップ実行すると、デフォルト値の 1 を説明する SelectedJobDefId プロパティを更新するLinkBut​​ton イベントの前に、OnItemDataBound イベントが発生しています。

イベントの順序を切り替える方法はありますか? 間違ったアプローチをしているだけかもしれません。

4

2 に答える 2

1

明らかに最も効率的なアプローチではありませんが、これをオプションとして提示するだけです。

が更新された後RepeaterLinkButtonクリック ハンドラーで明示的に再バインドできます。SelectedJobDefIdこのようにして、元の aspx マークアップをすべて保持できるはずです。

于 2012-04-19T12:36:09.623 に答える
0

LinkBut​​ton Click() イベントで NamingContainer プロパティを次のように使用することで、イベントの順序の問題を回避できました。

RepeaterItem item = (RepeaterItem)((LinkButton)sender).NamingContainer;      
HtmlTableCell td = (HtmlTableCell)item.FindControl("SelectTd");
td.BgColor = "purple";

これを機能させるために、ターゲット td runat="server" を作成し、「SelectTd」という名前を付けました。これは少し不快なので、隠しフィールドを介して jQuery ですべてを実行して、選択した項目を保存することができます。

于 2012-04-18T21:48:21.987 に答える