zoukankan      html  css  js  c++  java
  • 用DataGrid绑定复杂样式的控件

    DataGrid是asp.net网页应用程序中常用的控件,vs2005里面改成了GridView。一般比较简单的,可以生成以下这样的数据表格。
     
    有的时候,我们需要展示更复杂的内容,比如下图:
    其实这也是用DataGrid生成的,由于DataGrid提供了很强大的排序、翻页等功能,我们可以利用它创建列表,就非常的轻松自如。下面说一下使用方法。
     
    首先创建一个用户控件Ctrl1,比如上图那个产品展示,用户控件里定义好一个产品的样式,显示哪些内容(图片、产品名、描述)。后面数据绑定时,会反复加载这个用户控件。然后在页面上创建DataGrid控件:
    <asp:DataGrid AllowPaging="True" id="ThumbsGrid" runat="server" BorderStyle="none" BorderWidth="0" CellSpacing="1" CellPadding="5" ShowHeader="False" Width="98%" OnItemDataBound="onRowBound"></asp:DataGrid>
     
    在代码中,从数据库取出需要绑定的数据(比如取出的DataTable叫做contentDataTable,注意这必须是一个protected类型的全局变量)。根据contentDataTable和需要显示的列数,生成一个索引表t,将这个索引表和DataGrid进行绑定(注意,不是用contentDataTable进行绑定)。

    DataTable t = new DataTable();
    DataRow dr;
    int picPerRow = 3;//比如显示3列数据
    for(int a = 0; a != picPerRow; a++)//为索引表创建列
    {
        t.Columns.Add(new DataColumn(a.ToString(), typeof(string)));
    }
    float frows = contentDataTable.Rows.Count / picPerRow;
    int num_rows = (int)Math.Ceiling(frows);//算出一共几行
    for(int b = 0; b != num_rows ; b++)
    {
        dr = t.NewRow();
        for(int a = 0; a != picPerRow; a++)
        {
            int curr = (b * picPerRow) + a;
            dr[a] = curr.ToString();
        }
        t.Rows.Add(dr);
    }
    ThumbsGrid.DataSource = new DataView(t);
    ThumbsGrid.DataBind();
     
    建立一个回调函数,在数据绑定的时候调用。回调的时候注意,可能每个Row里面会有很多Cell。
    protected void onRowBound(object sender, DataGridItemEventArgs e)
    {
        if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            for(int a = 0; a != e.Item.Cells.Count; a++)
            {
                ReplaceCellContent(e.Item.Cells[a]);
            }
        }
    }
    接下来设计替换单元的代码。

    private void ReplaceCellContent(TableCell i_c)
    {
        string itemno = i_c.Text;
        int itn = Convert.ToInt16(itemno);//取出cell的值,实际上是原m_contentDataTable的index

        if(itn >= m_contentDataTable.Rows.Count)
        {
            i_c.Text = "";//如果index超出了原表的数据条数,往往出现在最后一行。
        }
        else
        {
            Ctrl1 ctrl = (Ctrl1) Page.LoadControl("Ctrl1.ascx");
            //根据m_contentDataTable.Rows[itn]绑定用户控件
            i_c.Controls.Clear();//要先清除原来cell里面的控件
            i_c.Controls.Add(ctrl);
        }
    }
  • 相关阅读:
    postman-3http请求
    postman-2get发送请求
    postman-1版本区别、选择
    mysql-13处理重复数据
    mysql-12序列使用
    mysql-11元数据
    mysql-10临时表、复制表
    10)global预定义变量
    9)用request方式
    8)post方式提交和简单那处理
  • 原文地址:https://www.cnblogs.com/powerson/p/2091009.html
Copyright © 2011-2022 走看看