我想根据交易状态栏进入转发器隐藏按钮 但无法访问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;
}
}
这是我的转发器代码
<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();
答案 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事件。