数据绑定控件显示数据换行的几个实例

不知不觉做web开发已经2年了,在这两年里我干的最多的活就是数据绑定。我个人比较喜欢用datagrid,我最开始接触的就是datagrid,然后是repeater,然后是datalist、gridview等。有些时候客户要求特定的格式显示数据,比如数据横向排开,一行显示几列等。这就是典型的控件应用变通,有些不让用任何控件的我就用代码在后台写,然后将形成的html发送给前台的html控件。

废话不多说,拿数据横向排开,一行显示2列来做个例子。

repeater:

<table cellpadding="0" border="0" cellspacing="0" width="100%" id="tblData" class="tblJhwc">
          <tr class="trHead">
              <td>单位</td>
              <td>计划</td>
              <td>完成</td>
              <td width="66">百分比</td>
              <td>单位</td>
              <td>计划</td>
              <td>完成</td>
              <td width="66">百分比</td>
            </tr>
            <tr>
      <asp:Repeater runat="server" ID="rptData" OnItemDataBound="rptData_ItemDataBound">
     <ItemTemplate>
         <td><%# Eval("dwmc") %></td>
         <td sm='计划|<%# Eval("jhqk").ToString().Trim()%>' class="tipTd"><%# Eval("jh") %></td>
         <td sm='已完成|<%# Eval("wcqk").ToString().Trim()%>' class="tipTd"><%# Eval("wc")%></td>
         <td><%# Eval("wcbl")%></td>
     </ItemTemplate>
     </asp:Repeater>
     </tr>
        </table>

 

后台:

 //分两列显示
        protected void rptData_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
        {
            if ((e.Item.ItemIndex+1) % 2 == 0)
            {
                e.Item.Controls.Add(new LiteralControl("</tr><tr>"));
            }
        }

 

datalist就比较简单点了

<asp:DataList ID="DList_Nbrj" RepeatDirection="Horizontal" RepeatColumns="2" ShowFooter="false" ShowHeader="false" BorderWidth="0" runat="server">
       <ItemTemplate>
           <a title='<%#DataBinder.Eval(Container.DataItem, "SoftName")%>' href="javascript:void(0)" οnclick="openNbrjLink('<%# DataBinder.Eval(Container.DataItem, "SoftLink") %>',this)" >
       <%# DataBinder.Eval(Container.DataItem, "SoftImgPath").ToString() == "" ? DataBinder.Eval(Container.DataItem, "SoftName") : DataBinder.Eval(Container.DataItem, "SoftImg")%></a>
          </ItemTemplate>
     </asp:DataList>

 

属性RepeatDirection是重复方向,RepeatColumns是显示的列数。

 

手写的html代码

前台我用 <asp:Literal runat="server" ID="litTable"></asp:Literal>显示html内容

后台:

int cols = 2;//一行显示的单位个数
                string tableHtml = "<table cellspacing='0' cellpadding='2' border='0' ><tr>";
                string imgHtml = "";
                DataRow[] drData = dtData.Select("sjdwdm= '" + sjdwdm + "'");
                //Response.Write("bbbbb");
                for (int i = 0; i < drData.Length; i++)
                {
                    if (drData[i]["sl"].ToString() == "0")//未上报
                    {
                        //tips = "title='未上报'";
                        imgHtml = "<img src='../images/redCross.gif'>";//红X
                    }
                    else//上报了(dt.Rows[i]["sl"].ToString()不会是空)
                    {
                        if (drData[i]["cb"].ToString() == "1")//迟报
                        {
                            if (drData[i]["cfsb"].ToString() == "1")//重复上报
                            {
                                //tips = "title='迟报且重复上报'";
                                imgHtml = "<img src='../images/dblgreenFlag.gif'>";//绿绿旗
                            }
                            else//没有重复上报
                            {
                                //tips = "title='迟报'";
                                imgHtml = "<img src='../images/greenFlag.gif'>";//绿旗
                            }
                        }
                        else//正常上报
                        {
                            if (drData[i]["cfsb"].ToString() == "1")//重复上报
                            {
                                //tips = "title='重复上报'";
                                imgHtml = "<img src='../images/dblredFlag.gif'>";//红红旗
                            }
                            else
                            {
                                //tips = "title='正常上报'";
                                imgHtml = "<img src='../images/redFlag.gif'>";//红旗
                            }

                        }
                    }
                    tableHtml += "<td width='60' align='left' οnmοuseοver='javascript:this.className=/"tdOver/"' οnmοuseοut='javascript:this.className=/"tdOut/"' class='tdOut' οnclick='setLink(/"" + drData[i]["dwdm"] + "/",/"" + drData[i]["dwscgs"] + "/",/"" + tablename + "/",/"" + rq.Replace("-", "") + "/")' title='每天上报时间:" + drData[i]["mtsbsj"] + "'>" + drData[i]["dwscgs"] + "</td><td align='left' width='45'>" + imgHtml + "</td>";
                    if ((i + 1) % cols == 0)
                        tableHtml += "</tr><tr>";
                }
                if (drData.Length % cols > 0)//补齐最后一行的单元格
                {
                    int len = cols - (drData.Length % cols);
                    for (int j = 0; j < len; j++)
                    {
                        tableHtml += "<td width='60'>&nbsp;</td><td width='45'>&nbsp;</td>";
                    }
                }
                tableHtml += "</tr></table>";

 

手写的代码从执行效率上说应该比控件快点,毕竟不用控件先解析出html代码。先总结这些,以后再修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值