灵活掌握asp.net中gridview控件的多种使用方法(上)

关于“灵活掌握asp.net中gridview控件的多种使用方法(上)”,我将从以下几个方面进行详细讲解:

  1. GridView控件的基本使用
  2. 翻页、排序和筛选功能的实现
  3. 多表联合查询结果展示
  4. 多数据源联合查询结果展示

下面我们分别来详细讲解。

1. GridView控件的基本使用

GridView控件是ASP.NET中最常用的数据展示控件之一。其基本用法如下:

<asp:GridView ID="GridView1" runat="server">
</asp:GridView>

可以看到,GridView控件的使用方法十分简单和直接。不过,要让GridView控件工作,还需要添加数据源和字段。

我们可以通过在后台代码文件(.aspx.cs)中的Page_Load方法中向GridView控件添加数据源,然后就可以将数据绑定到GridView控件上。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        GridView1.DataSource = GetData(); //GetData()方法用于返回数据源,在此不赘述
        GridView1.DataBind();
    }
}

注意,在Page_Load方法中,我们加入了一个IsPostBack判断,这是为了避免每次刷新页面都重新绑定数据源。

2. 翻页、排序和筛选功能的实现

对于一个友好的数据展示网页,翻页、排序和筛选功能是不可或缺的部分。这里我们将详细讲解如何在GridView控件中实现这些功能。

翻页

GridView控件的翻页功能可以通过以下代码实现:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="10" OnPageIndexChanging="GridView1_PageIndexChanging">
</asp:GridView>

其中,AllowPaging属性指定了翻页功能开启,PageSize属性指定了每页显示数据的条数。此外,我们还向GridView控件中添加了一个PageIndexChanging事件,在此事件中将实现翻页的具体逻辑。

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    GridView1.DataSource = GetData();
    GridView1.DataBind();
}

可以看到,在GridView1_PageIndexChanging事件中,我们将GridView控件的PageIndex属性赋值为e.NewPageIndex,e.NewPageIndex代表了点击的新页面索引。然后重新绑定数据源和刷新GridView1即可实现翻页功能。

排序

GridView控件的排序功能可以通过以下代码实现:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" OnSorting="GridView1_Sorting">
</asp:GridView>

其中,AllowSorting属性指定了排序功能开启。我们还向GridView控件中添加了一个Sorting事件,在此事件中将实现排序的具体逻辑。

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable dataTable = GetData();
    if(dataTable != null)
    {
        DataView dataView = new DataView(dataTable);
        dataView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
        GridView1.DataSource = dataView;
        GridView1.DataBind();
    }
}

private string GetSortDirection(string column)
{
    string direction = "ASC";
    string currentColumn = ViewState["SortColumn"] as string;
    if(currentColumn != null)
    {
        if(currentColumn == column)
        {
            string currentDirection = ViewState["SortDirection"] as string;
            if(currentDirection != null && currentDirection == "ASC")
            {
                direction = "DESC";
            }
        }
    }
    ViewState["SortColumn"] = column;
    ViewState["SortDirection"] = direction;
    return direction;
}

可以看到,在GridView1_Sorting事件中,我们首先获取数据源,然后将数据源转化为DataView类型,并将其Sort属性设置为e.SortExpression(SortExpression就是当前页面被点击的表头字段),最后重新绑定数据源和刷新GridView1即可实现排序功能。

注意,由于GridView控件使用了ViewState来储存当前的排序状态,我们需要在代码中手动修改ViewState的值,这样页面才能正确地显示排序状态。

筛选

GridView控件的筛选功能可以通过以下代码实现:

<asp:GridView ID="GridView1" runat="server" AllowFilteringByColumn="True" OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>

其中,AllowFilteringByColumn属性指定了筛选功能开启。我们还向GridView控件中添加了一个RowDataBound事件,在此事件中将实现筛选的具体逻辑。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.Header)
    {
        for(int i = 0; i < e.Row.Cells.Count; i++)
        {
            string column = GridView1.Columns[i].HeaderText;
            if(!string.IsNullOrEmpty(column))
            {
                DropDownList dropDownList = new DropDownList();
                dropDownList.Items.Add(new ListItem("All", string.Empty));
                dropDownList.AppendDataBoundItems = true;
                dropDownList.AutoPostBack = true;
                dropDownList.SelectedIndexChanged += new EventHandler(dropDownList_SelectedIndexChanged);
                dropDownList.Attributes.Add("runat", "server");

                foreach(DataRowView row in GetData().DefaultView)
                {
                    string currentValue = row[column] as string;
                    if(!string.IsNullOrEmpty(currentValue) && !dropDownList.Items.Contains(new ListItem(currentValue)))
                    {
                        dropDownList.Items.Add(new ListItem(currentValue));
                    }
                }

                e.Row.Cells[i].Controls.Add(dropDownList);
            }
        }
    }
}

protected void dropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList dropDownList = sender as DropDownList;
    string column = ((DataControlFieldHeaderCell)dropDownList.Parent).ContainingField.HeaderText;
    ViewState[column] = dropDownList.SelectedValue;
    GridView1.DataSource = GetData();
    GridView1.DataBind();
}

可以看到,在GridView1_RowDataBound事件中,我们在GridView控件的表头中添加了一个DropDownList控件。然后,我们循环数据源的每一行,找到当前字段不为空且DropDownList中不存在的值,并将其添加到DropDownList中。最后,我们将DropDownList添加到GridView控件的表头中即可实现筛选功能。

注意,在筛选功能中,我们需要使用ViewState来储存当前的筛选条件,所以我们需要手动修改ViewState的值,这样页面才能正确地显示筛选状态。

3. 多表联合查询结果展示

在实际开发中,我们往往需要展示多个数据表中的数据,这时就需要使用多表联合查询。以下是一个简单的多表联合查询的示例代码:

SELECT A.ID, A.Name, B.Address
FROM TableA A INNER JOIN TableB B ON A.ID = B.ID

以上SQL语句将返回TableA和TableB两个表中ID和Name、Address两列的结果集。我们可以通过以下代码将结果集绑定到GridView控件上:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        GridView1.DataSource = GetMultiData();
        GridView1.DataBind();
    }
}

private DataTable GetMultiData()
{
    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
    {
        using (SqlCommand command = new SqlCommand())
        {
            command.Connection = connection;
            command.CommandText = "SELECT A.ID, A.Name, B.Address FROM TableA A INNER JOIN TableB B ON A.ID = B.ID";
            command.CommandType = CommandType.Text;
            using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
            {
                DataTable dataTable = new DataTable();
                dataAdapter.Fill(dataTable);
                return dataTable;
            }
        }
    }
}

这里我们使用了一个名为“ConnectionString”的连接字符串,用于连接数据库。我们通过SqlCommand和SqlDataAdapter类向数据库发送SQL查询语句,然后将结果集转化为DataTable类型,并返回给GridView控件即可成功展示多表联合查询结果。

4. 多数据源联合查询结果展示

除了上面提到的多表联合查询,我们还可能需要通过联合多个数据源来展示结果。以下是一个简单的多数据源联合查询的示例代码:

SELECT User.ID, User.Name, Order.Amount
FROM User
INNER JOIN Order ON User.ID = Order.UserID
UNION ALL
SELECT Employee.ID, Employee.Name, Salary.Amount
FROM Employee
INNER JOIN Salary ON Employee.ID = Salary.EmployeeID

以上SQL语句将返回用户和员工两个表中ID和Name、Amount两列的结果集,并通过UNION ALL命令将两个结果集合并成一个结果集。我们可以通过以下代码将结果集绑定到GridView控件上:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        GridView1.DataSource = GetMultiSourceData();
        GridView1.DataBind();
    }
}

private DataTable GetMultiSourceData()
{
    using (SqlConnection connection1 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString))
    {
        using (SqlCommand command1 = new SqlCommand())
        {
            command1.Connection = connection1;
            command1.CommandText = "SELECT User.ID, User.Name, Order.Amount FROM User INNER JOIN Order ON User.ID = Order.UserID";
            command1.CommandType = CommandType.Text;

            using (SqlConnection connection2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString))
            {
                using (SqlCommand command2 = new SqlCommand())
                {
                    command2.Connection = connection2;
                    command2.CommandText = "SELECT Employee.ID, Employee.Name, Salary.Amount FROM Employee INNER JOIN Salary ON Employee.ID = Salary.EmployeeID";
                    command2.CommandType = CommandType.Text;

                    using (DataSet dataSet = new DataSet())
                    {
                        using (SqlDataAdapter dataAdapter1 = new SqlDataAdapter(command1))
                        {
                            dataAdapter1.Fill(dataSet, "UserTable");
                        }

                        using (SqlDataAdapter dataAdapter2 = new SqlDataAdapter(command2))
                        {
                            dataAdapter2.Fill(dataSet, "EmployeeTable");
                        }

                        using (DataRelation relation = new DataRelation("UserEmployeeRelation", dataSet.Tables["EmployeeTable"].Columns["ID"], dataSet.Tables["UserTable"].Columns["ID"]))
                        {
                            dataSet.Relations.Add(relation);
                            DataTable dataTable = new DataTable();
                            dataTable.Columns.Add("ID");
                            dataTable.Columns.Add("Name");
                            dataTable.Columns.Add("Amount");
                            foreach (DataRow userRow in dataSet.Tables["UserTable"].Rows)
                            {
                                DataRow[] orderRows = userRow.GetChildRows("UserEmployeeRelation");
                                DataRow newRow = dataTable.NewRow();
                                newRow["ID"] = userRow["ID"];
                                newRow["Name"] = userRow["Name"];
                                newRow["Amount"] = orderRows[0]["Amount"];
                                dataTable.Rows.Add(newRow);
                            }
                            return dataTable;
                        }
                    }
                }
            }
        }
    }
}

这里我们需要使用两个连接字符串和SqlCommand、SqlDataAdapter类向两个数据源分别发送SQL查询语句,然后使用DataSet将两个结果集整合起来,并通过DataRelation建立它们之间的关系。最后,我们手动遍历结果集,将它们合并到一个新的DataTable中,并返回给GridView控件即可。

至此,关于“灵活掌握asp.net中gridview控件的多种使用方法(上)”的完整攻略讲解就结束了。其中,我们详细讲解了GridView控件的基本使用、翻页、排序和筛选功能的实现、多表联合查询结果展示以及多数据源联合查询结果展示等多个方面,希望能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:灵活掌握asp.net中gridview控件的多种使用方法(上) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript 页面编码与浏览器类型判断代码

    让我来详细讲解一下”JavaScript页面编码与浏览器类型判断代码”的完整攻略。 页面编码 在网页开发中,为了确保浏览器能正确地解读和显示我们写出的HTML和CSS代码,我们需要在网页中指定一种字符编码方式。常见的字符编码方式包括UTF-8, GB2312, GBK等。 我们可以通过在网页中加入如下的meta标签来指定网页使用的编码方式。 <meta…

    JavaScript 2023年5月20日
    00
  • springboot中JSONObject遍历并替换部分json值

    首先需要明确的是,JSONObject是Java中的一个JSON对象,用于操作JSON数据。在SpringBoot中,我们可以使用Spring的RestController注解来接收并处理JSON数据,然后使用JSONObject进行处理。 接下来,介绍一下如何遍历JSONObject并替换部分json值。一般情况下,我们可以使用迭代器来遍历一个JSONOb…

    JavaScript 2023年6月11日
    00
  • javascript之Array 数组对象详解

    JavaScript之Array数组对象详解 什么是数组 在 JavaScript 中,数组(Array)是一种复合数据类型,用于存储一组有序的数据。可以将数组看作是一个盒子,该盒子中可以存放多个数据,而且这些数据是有序的,通过下标(索引)来访问每一个数据。 数组的创建 JavaScript 中,可以使用两种方式来创建数组: 1. 使用字面量方式创建数组 l…

    JavaScript 2023年5月27日
    00
  • Javascript Array slice 方法

    以下是关于JavaScript Array slice方法的完整攻略。 JavaScript Array slice方法 JavaScript Array slice方法用于从数组中提取指定的元素,并将其作为一个新数组返回。该方法不改变原始数组,而是返回一个新的数组。 下面是一个使用slice方法的示例: var arr = [1, 2,3, 4, 5]; …

    JavaScript 2023年5月11日
    00
  • Bootstrap零基础学习第一课之模板

    那么我们来详细讲解一下 “Bootstrap零基础学习第一课之模板” 的完整攻略。 简介 Bootstrap 是 Twitter 推出的一个用于前端页面开发的框架,使用 Bootstrap 可以快速搭建出漂亮的响应式页面,很多网站都采用了 Bootstrap。Bootstrap 因其易学易用和功能强大而备受欢迎,是很多前端工程师的必备技能之一。 在开始我们的…

    JavaScript 2023年5月19日
    00
  • 基于javascript的无缝滚动动画实现2

    针对”基于javascript的无缝滚动动画实现2″,我来给您详细讲解一下。 简介 无缝滚动动画是Web开发中较为常见的功能,通常用于实现图片、文字等大块内容的滚动展示。本攻略将介绍使用JavaScript实现无缝滚动动画的方法。 实现过程 本攻略实现的无缝滚动动画需要以下主要步骤: 创建HTML布局:需要创建一个固定大小的div容器,再将需要滚动展示的内容…

    JavaScript 2023年6月10日
    00
  • 浅谈JavaScript_DOM学习篇_图片切换小案例

    浅谈JavaScript DOM学习篇 – 图片切换小案例 学习 JavaScript 的过程离不开操作文档对象模型(DOM),本文将通过一个简单的图片切换小案例来阐述 DOM 的基础知识和常用操作。 一、前置知识 在开始学习 DOM 之前应该先了解以下基础知识: HTML CSS JavaScript 语法基础 二、正文内容 1. 简述DOM DOM(文档…

    JavaScript 2023年6月10日
    00
  • HTML5实现的震撼3D焦点图动画的示例代码

    下面是关于“HTML5实现的震撼3D焦点图动画”的完整攻略,主要分为以下三个部分: 一、准备工作 1.1 导入必要的CSS和JS文件 HTML5实现的震撼3D焦点图动画需要使用一些CSS和JS文件,这些文件需要事先导入到HTML页面中。 其中必要的CSS文件有: <link rel="stylesheet" href="c…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部