zoukankan      html  css  js  c++  java
  • Repeater控件使用总结

    以前喜欢用gridview来显示数据,在面试一家外包公司时,他们对gridview嗤之以鼻,说:“微软很多自己的控件都不用,控件只是为了入门,我们只用repeater”,我不知道gridview和repeater谁更强大,但都了解一下不是坏事,其中也不全是Repeater的总结,也包括javascript等。

    使用repeater可以很方便的绑定数据到表格,到控件的属性,这对于数据的每一行处理来说至关重要,比如说有一行数据,后面有一个删除按钮,可以将这行数据的主键绑定到删除按钮的CommandArgument上,在repeater控件的ItemCommand事件上来处理这些事情。

    <td>
    <asp:Button ID="btnAuthorized" Text="取消授权" runat="server" CommandName="Authorized" CommandArgument='<%#Eval("Id") %>' />
    </td>
    <td>
    <div onclick="javascript:return Del()">
    <asp:Button ID="btnDel" Text="删除" runat="server" CommandName="Del" CommandArgument='<%#Eval("Id") %>' /></div>
    </td>

    ItemCommand事件

    protected void repUnAuthorized_ItemCommand(object source, RepeaterCommandEventArgs e)
            {
                try
                {
                    if (e.CommandName == "Authorized")
                    {
                        long Id = long.Parse(e.CommandArgument.ToString());
                        //do something
                    }
                    else if (e.CommandName == "Del")
                    {
                        long Id = long.Parse(e.CommandArgument.ToString());
                        //do something
                    }
                }
                catch (Exception)
                {
    
                    throw;
                }
            }

    遍历数据也很方便,但是要注意一点,在repeater里的服务器端控件需要调用FindControl方法才能得到

    protected void btnAllDel_Click(object sender, EventArgs e)
            {
                try
                {
                    for (int i = 0; i < repUnAuthorized.Items.Count; i++)
                    {
                        CheckBox chk = (CheckBox)repUnAuthorized.Items[i].FindControl("chk");
                        if (chk.Checked == true)
                        {
                            Button btnDel = (Button)repUnAuthorized.Items[i].FindControl("btnDel");
                            long Id = long.Parse(btnDel.CommandArgument.ToString());
                            //do something
                        }
                    }
                }
                catch (Exception)
                {
    
                    throw;
                }
            }

    能够遍历数据,能够控制每一行的行为,完成一般的需求绰绰有余,并且样式布局完全可控,美中不足就是没有EmptyTemplate,当数据为空时,没有友好提示,但是,上帝为你关上了一扇门必定打开一扇窗,当数据为空时,我们有更加巧妙的方法

    <FooterTemplate>
                                <tr>
                                    <td colspan="12">
                                        <asp:Label ID="lblNoData" runat="server" Visible="<%#repUnAuthorized.Items.Count==0%>"
                                            Text="没有您需要的数据!"></asp:Label>
                                    </td>
                                </tr>
    </FooterTemplate>

    这样我们就能友好的提示了

    关于一些友好的界面,比如说对于删除操作,很可能造成误删的情况,需要在删除前确认,这些东西如果放到服务器端也能实现,但是javascript就没有存在价值了,对于确认之类的操作确实可以放到客户端,而对于校验,客户端可有可无,但是服务器端必须有,想起不知谁说的一句话“永远不要相信客户的输入”。

    function Del() {
                if (confirm("确定要删除?")) {
                    return true;
                }
                else {
                    return false;
                }
            }

    实际运用

    <div style="float: left;" onclick="javascript:return Del()">
    <asp:Button ID="btnAllDel" Text="删除" runat="server" OnClick="btnAllDel_Click" /></div>
    </div>

    当返回位false的时候,btnAllDel是不会被点击到的,很强大,就总结到这里。

  • 相关阅读:
    FZU 2272 Frog 第八届福建省赛 (鸡兔同笼水题)
    HDU 1166 敌兵布阵(线段树点更新区间求和裸题)
    poj 2251 Dungeon Master (BFS 三维)
    16 多校 8 Ball (贪心排序)很巧妙的思路啊~
    16 多校8 Rikka with Parenthesis II
    紫书动规 例题9-7 UVA
    紫书动规 例题9-6 UVA
    紫书动规 例题9-5 UVA
    紫书动规 例题9-4 UVA
    紫书动规 例题9-3 UVA
  • 原文地址:https://www.cnblogs.com/HelloMyWorld/p/2876251.html
Copyright © 2011-2022 走看看