需要有关中继器的帮助

时间:2010-11-24 04:36:53

标签: c# asp.net

这是我的转发器:

<asp:Repeater ID="myRepeater" OnItemCommand="myRepeater_ItemCommand" runat="server" OnItemDataBound="myRepeater_OnItemDataBound">
     <HeaderTemplate>
         <table width="99%" border="0" cellpadding="0" cellspacing="0">
             <tr class="lgrey">
                <td>Default</td>
             </tr>
     </HeaderTemplate>
     <ItemTemplate>
         <table>
             <tr>
                <td>
                    <asp:LinkButton ID="lnk1" Text="Make Default" CommandName="SetDefault" runat="server" Visible="True" CommandArgument='<%#Eval("UserID") %>' CausesValidation="false"></asp:LinkButton>
                    <asp:Label ID="label1" Text="Yes" runat="server" Visible="False"></asp:Label>
                </td>
             </tr>
     </ItemTemplate>
     <FooterTemplate>
         </table>
     </FooterTemplate>
</asp:Repeater>

我想要的是当用户点击任何一个时 转发器呈现的列表中的“lnk1”链接按钮, 链接应替换为标签“label1”.. 即,当用户点击“默认”链接时,应将其替换为“是”标签

调用此方法obj.SetDefaultAddress();正在设置数据库中的默认地址。 问题是当转发器呈现时显示label1和lnk1 ......

正在发生的事情就是显示“Make Default”LinkBut​​ton和“YES”标签 在我的转发器内的表的“默认”列下。

我想要一些代码来检查我的数据库中的“IsDefault”值并显示“Make Default”链接按钮

和“YES”相应地标记...即如果IsDefault在DB中的值为TRUE,则应在转发器中显示“YES” 否则“默认”

3 个答案:

答案 0 :(得分:2)

你确定在ItemCommand下面的代码片段正在执行吗? 我只是将CommandName从SetDefault更改为aspx文件中的SetDefaultAddress以匹配后面代码中的那个,它起作用了。

答案 1 :(得分:0)

从哪里开始...

我认为造成问题的原因是SelectedItemDefaultAddress没有相互映射,因此当您点击按钮时,您将获得所选的索引集和{{1事件正在显示/隐藏您想要的内容,但是当从数据库初始化网格时,OnItemDatabound未被设置。

我不知道你的数据源是什么,显然有更多的代码而不是你发布的代码,但是如果你可以查看SelectedItem处理程序中的e.Item.DataItem,你可以当地址为默认值(myRepeater_ItemDataBound

时,将当前项设置为选中状态

答案 2 :(得分:0)

我可能会从标记本身开始 - 这假设你的数据源中有bit / boolean类型的“IsDefault”列/属性,表明地址是默认的。所以使用以下标记:

...
<tr>
   <td>
       <asp:LinkButton ID="lnk1" Text="Make Default" CommandName="SetDefault" runat="server" Visible='<%# !Eval("IsDefault") %>' CommandArgument='<%#Eval("UserID") %>' CausesValidation="false"></asp:LinkButton>
       <asp:Label ID="label1" Text="Yes" runat="server" Visible='<%# !Eval("IsDefault") %>'></asp:Label>
    </td>
</tr>
...

您需要根据数据源中的属性控制可见性(使用标记或ItemDataBound事件)。此外,当单击SetDefault链接时,您必须重新绑定转发器新状态或显式切换可见性(正如您当前的代码所做的那样)。

编辑: 如果数据绑定表达式不起作用,则必须在ItemDataBound事件中执行此操作。我看到你已经尝试过,但有一个错误 - bllUsers obj=new bllUsers();总是将IsDefault视为false - 你需要使用数据项。例如,

protected void myRepeater_ItemDataBound(Object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
           bllUsers obj = e.Item.DataItem as bllUsers;
           ((Label)e.Item.FindControl("ldefault")).Visible = obj.isDefault; 
           ((Button)e.Item.FindControl("btnMakeDefault")).Visible = ! obj.isDefault; 
        }
    }