如何隐藏aspx转发器中的链接并获取dataitem

时间:2014-04-26 01:16:24

标签: asp.net

我想根据交易状态栏进入转发器隐藏按钮 但无法访问dataItem.dealstatus来检查比较

这是我在后面代码中的内容

protected void myrepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
        {


             if (e.Item.DataItem.DealStatus == "Sale Pending")
            {
               e.Item.FindControl("LinkDownloads").Visible = false;
            }

             if (e.Item.DataItem.DealStatus == "Quote")
             {
                  e.Item.FindControl("LinkDownloads").Visible = false;
                  e.Item.FindControl("LinkPurchase").Visible = false;
             }

        }

enter image description here

这是我的转发器代码

<asp:Repeater ID="SearchRepeater" runat="server" OnItemCreated="myrepeater_ItemCreated">
                                    <ItemTemplate>
                                    <tr>
                                                <td class="sorting_1"><asp:LinkButton runat="server" CommandArgument='<%#Eval("DealId")%>' OnClick="OnClickCust" ><%#Eval("FullName")%></asp:LinkButton> </td>
                                                <td class=""><%#Eval("Year")%> <%#Eval("Make")%> <%#Eval("Model")%></td>
                                                <td class=""><%#Eval("Vin")%></td>
                                                <td class=""><%#Eval("Dt")%></td>
                                                <td class=""><%#Eval("DealStatus")%></td>
                                                <td class="">

                                                <asp:LinkButton ID="PlanButton" CommandArgument='<%#Eval("DealID")%>'  class="btn btn-default btn-xs btn-block plan" runat="server" OnClick="LinkPlan_OnClickkPlan_OnClick">Plan</asp:LinkButton>
                                                <asp:LinkButton ID="LinkPurchase" class="btn btn-default btn-xs btn-block purchase" runat="server">Purchase</asp:LinkButton>
                                                </td>
                                                <td class="">
                                                <asp:LinkButton ID="LinkDownloads" class="btn btn-default btn-xs btn-block downloads" runat="server">Downloads</asp:LinkButton>
                                                </td>
                                            </tr>
                                    </ItemTemplate>    
                                  </asp:Repeater>

这是答案

object DI = e.Item.DataItem;
string status = DataBinder.Eval(DI, "DealStatus").ToString();

2 个答案:

答案 0 :(得分:0)

尝试使用标签代替。 转发器内部

 <asp:Label ID="DealStatus_Lbl" runat="server" Text='<%# Eval("DealStatus") %>' />

背后的代码

Label lblA = (Label)e.Item.FindControl("DealStatus_Lbl");
If(lbla.Text== )
{
}

答案 1 :(得分:0)

e.Item.DataItem始终返回您案例中的对象。因此e.Item.DataItem.DealStatus无效。通常,您必须将对象强制转换为其组成项。而那个项目取决于你对转发器的限制......

例如如果它是一个人物对象列表,其中每个人物对象都有姓名和年龄作为属性,你可以这样做:

var person = (Person)e.Item.DataItem;
var name = person.name;

如果是名称列表(即简单List<string>),则e.Item.DataItem将表示单个字符串对象。因此:

var name = (string) e.Item.DataItem;

大多数人只通过调试了解该组成对象是什么。所以不用担心。只需将转发器绑定到数据表,找到e.Item.DataItem的类型,看看我的意思。 :)

您的解决方案没有任何严重错误,但如果您希望以类型安全且相对有效的方式处理项目,我会先尝试将其转换为可工作对象,然后再使用它。

此外,假设该对象具有两个或更多属性,则多次调用DataBinder.Eval来获取所有属性值是不明智的,因为每次调用都会产生反射开销。

更新:事件参数仅在数据绑定事件上填充DataItem,即ItemDataBound事件。