Que Reg:如何在GridView中对合并的网格列进行排序 [英] Que Reg: How to sort the merged grid columns in GridView

查看:68
本文介绍了Que Reg:如何在GridView中对合并的网格列进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我已在下面附上我的申请。

我想对合并列进行排序在GridView下面的示例中。



MergingGrid.aspx:

Hi,

I have attached my application below.
I want to sort the merged column in the GridView in below Sample.

MergingGrid.aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MergingGrid.aspx.cs" Inherits="GridSample.MergingGrid" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
<style type="text/css">
.header
{
background-color: blue;
color:white;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:gridview ID="grid" runat="server" AutoGenerateColumns="false" OnRowCreated="GridView1_RowCreated" HeaderStyle-CssClass="header">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name"/>
<asp:BoundField DataField="Mathematics" HeaderText="Mathematics" />
<asp:BoundField DataField="Georgaphy" HeaderText="Georgaphy" />
<asp:BoundField DataField="Biology" HeaderText="Biology" />
<asp:BoundField DataField="Average" HeaderText="Average" />
</Columns>
</asp:gridview>
</div>
</form>
</body>
</html>



MergingGrid.aspx.cs:


MergingGrid.aspx.cs :

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

namespace GridSample
{
public partial class MergingGrid : System.Web.UI.Page
{
//protected void Page_Load(object sender, EventArgs e)
//{

//}

#region Private

[Serializable]
private class MergedColumnsInfo
{
// indexes of merged columns
public List<int> MergedColumns = new List<int>();
// key-value pairs: key = first column index, value = number of merged columns
public Hashtable StartColumns = new Hashtable();
// key-value pairs: key = first column index, value = common title of merged columns
public Hashtable Titles = new Hashtable();

//parameters: merged columns's indexes, common title of merged columns
public void AddMergedColumns(int[] columnsIndexes, string title)
{
MergedColumns.AddRange(columnsIndexes);
StartColumns.Add(columnsIndexes[0], columnsIndexes.Length);
Titles.Add(columnsIndexes[0], title);
}
}

//property for storing of information about merged columns
private MergedColumnsInfo info
{
get
{
if (ViewState["info"] == null)
ViewState["info"] = new MergedColumnsInfo();
return (MergedColumnsInfo)ViewState["info"];

}
}

//method for rendering of columns's headers
private void RenderHeader(HtmlTextWriter output, Control container)
{
for (int i = 0; i < container.Controls.Count; i++)
{
TableCell cell = (TableCell)container.Controls[i];
//stretch non merged columns for two rows
if (!info.MergedColumns.Contains(i))
{
cell.Attributes["rowspan"] = "2";
cell.RenderControl(output);
}
else //render merged columns's common title
if (info.StartColumns.Contains(i))
{
output.Write(string.Format("<th align='center' colspan='{0}'>{1}</th>",
info.StartColumns[i], info.Titles[i]));
}
}

//close first row
output.RenderEndTag();
//set attributes for second row
grid.HeaderStyle.AddAttributesToRender(output);
//start second row
output.RenderBeginTag("tr");

//render second row (only merged columns)
for (int i = 0; i < info.MergedColumns.Count; i++)
{
TableCell cell = (TableCell)container.Controls[info.MergedColumns[i]];
cell.RenderControl(output);
}
}

private DataTable GetDataSource()
{
DataTable table = new DataTable();
table.Columns.Add("Name");
table.Columns.Add("Mathematics", typeof(int));
table.Columns.Add("Georgaphy");
table.Columns.Add("Biology");
table.Columns.Add("Average");

table.Rows.Add(new object[] { "A. Ivanova", 3, 5, 4, 4 });
table.Rows.Add(new object[] { "I. Petrenko", 5, 5, 4, 4.67 });
table.Rows.Add(new object[] { "O. Kovaleva", 5, 3, 5, 4.33 });
table.Rows.Add(new object[] { "R. Bubka", 5, 5, 5, 5 });
return table;
}

#endregion

#region Event Handlers

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//merge second, third and fourth columns with common title "Subjects"
info.AddMergedColumns(new int[] { 1, 2, 3 }, "Subjects");

grid.DataSource = GetDataSource();
grid.DataBind();
}
}
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//call the method for custom rendering of columns's headers
if (e.Row.RowType == DataControlRowType.Header)
e.Row.SetRenderMethodDelegate(RenderHeader);

}

#endregion
}
}



请给我解决方案。



问候,

Rakesh


Please give me the solution.

Regards,
Rakesh

推荐答案

基本的,试试这个开始:



http://www.agrinei.com/gridviewhelper/gridviewhelper_en.htm [ ^ ]



http://www.agrinei.com/gridviewhelper/gridviewhelper_pt.htm [ ^ ]
the basic, try this to start :

http://www.agrinei.com/gridviewhelper/gridviewhelper_en.htm[^]

http://www.agrinei.com/gridviewhelper/gridviewhelper_pt.htm[^]


MergingGrid.aspx



MergingGrid.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MergingGrid.aspx.cs" Inherits="GridSample.MergingGrid" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
<style type="text/css">
.header
{
  background-color: blue;
  color:white;
}
</style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:gridview ID="grid" runat="server" AutoGenerateColumns="false" OnRowCreated="GridView1_RowCreated" HeaderStyle-CssClass="header" onsorting="GridView1_Sorting" AllowSorting="true">
            <Columns>
                <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name"/>
                <asp:BoundField DataField="Mathematics" HeaderText="Mathematics" SortExpression="Mathematics"  />
                <asp:BoundField DataField="Georgaphy" HeaderText="Georgaphy" SortExpression="Georgaphy" />
                <asp:BoundField DataField="Biology" HeaderText="Biology" SortExpression="Biology"/>
                <asp:BoundField DataField="Average" HeaderText="Average" SortExpression="Average"/>
            </Columns>
        </asp:gridview>
    </div>
    </form>
</body>
</html>





MergingGrid.aspx.cs:



使用系统;

使用System.Data;

u使用System.Collections来演唱System.Configuration;

;使用System.Web获得
;使用System.Web.Security获得
;

使用System.Web.UI;

使用System.Web.UI.WebControls;

使用System.Web.UI.WebControls.WebParts;

使用System.Web.UI.HtmlControls;

使用System.Collections.Generic;



namespace GridSample

{

公共部分类MergingGrid:System.Web.UI.Page

{

#region Private



[可序列化]

私有类MergedColumnsInfo

{

//合并列的索引

public List< int> MergedColumns = new List< int>();

//键值对:key =第一列索引,value =合并列数

public Hashtable StartColumns = new Hashtable();

//键值对:key =第一列索引,value =合并列的公共标题

public Hashtable Titles = new Hashtable();



//参数:合并列的索引,合并列的通用标题

public void AddMergedColumns(int [] columnsIndexes,string title )

{

MergedColumns.AddRange(columnsIndexes);

StartColumns.Add(columnsIndexes [0],columnsIndexes.Length);

Titles.Add(columnsIndexes [0],title);

}

}

//用于存储信息的属性关于合并列

私有MergedColumnsInfo info

{

get

{

if(ViewState [info] == null)

ViewState[\"info\"] = new MergedColumnsInfo();

return (MergedColumnsInfo)ViewState[\"info\"]; }

}



//method for rendering of columns’’s headers\t

private void RenderHeader(HtmlTextWriter output, Control container)

{

for (int i = 0; i < container.Controls.Count; i++)

{

TableCell cell = (TableCell)container.Controls[i];

//stretch non merged columns for two rows

if (!info.MergedColumns.Contains(i))

{

cell.Attributes[\"rowspan\"] = \"2\";

cell.RenderControl(output);

}

else //render merged columns’’s common title

if (info.StartColumns.Contains(i))

{

output.Write(string.Format(\"

{1}< /th>
\",

info.StartColumns[i], info.Titles[i]));

}

}



//close first row\t

output.RenderEndTag();

//set attributes for second row

grid.HeaderStyle.AddAttributesToRender(output);

//start second row

output.RenderBeginTag(\"tr\");



//render second row (only merged columns)

for (int i = 0;我< info.MergedColumns.Count; i++)

{

TableCell cell = (TableCell)container.Controls[info.MergedColumns[i]];

cell.RenderControl(output);

}

}



private DataTable GetDataSource()

{

DataTable table = new DataTable();

table.Columns.Add(\"Name\");

table.Columns.Add(\"Mathematics\", typeof(int));

table.Columns.Add(\"Georgaphy\");

table.Columns.Add(\"Biology\");

table.Columns.Add(\"Average\");



table.Rows.Add(new object[] { \"A. Ivanova\", 3, 5, 4, 4 });

table.Rows.Add(new object[] { \"I. Petrenko\", 5, 5, 4, 4.67 });

table.Rows.Add(new object[] { \"O. Kovaleva\", 5, 3, 5, 4.33 });

table.Rows.Add(new object[] { \"R. Bubka\", 5, 5, 5, 5 });

return table;

}



#endregion



#region Event Handlers



protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

//merge second, third and fourth columns with common title \"Subjects\"

info.AddMergedColumns(new int[] { 1, 2, 3 }, \"Subjects\");



grid.DataSource = GetDataSource();

grid.DataBind();

}

}

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)

{

//call the method for custom rendering of columns’’s headers\t

if (e.Row.RowType == DataControlRowType.Header)

e.Row.SetRenderMethodDelegate (RenderHeader);

}



public SortDirection dir

{

get

{

if (ViewState[\"dirState\"] == null)

{

ViewState[\"dirState\"] = SortDirection.Ascending;

}

return (SortDirection)ViewState[\"dirState\"];

}

set

{

ViewState[\"dirState\"] = value;

}

}

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)

{

string sortingDirection = string.Empty;

if (dir == SortDirection.Ascending)

{

dir = SortDirection.Descending;

sortingDirection = \"Desc\";
$b $b }

else

{

dir = SortDirection.Ascending;

sortingDirection = \"Asc\";

}



DataView sortedView = new DataView(GetDataSource());

sortedView.Sort = e.SortExpression + \" \" + sortingDirection;

grid.DataSource = sortedView;

grid.DataBind();

}



#endregion

}

}



MergingGrid.aspx.cs :

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

namespace GridSample
{
public partial class MergingGrid : System.Web.UI.Page
{
#region Private

[Serializable]
private class MergedColumnsInfo
{
// indexes of merged columns
public List<int> MergedColumns = new List<int>();
// key-value pairs: key = first column index, value = number of merged columns
public Hashtable StartColumns = new Hashtable();
// key-value pairs: key = first column index, value = common title of merged columns
public Hashtable Titles = new Hashtable();

//parameters: merged columns''s indexes, common title of merged columns
public void AddMergedColumns(int[] columnsIndexes, string title)
{
MergedColumns.AddRange(columnsIndexes);
StartColumns.Add(columnsIndexes[0], columnsIndexes.Length);
Titles.Add(columnsIndexes[0], title);
}
}
//property for storing of information about merged columns
private MergedColumnsInfo info
{
get
{
if (ViewState["info"] == null)
ViewState["info"] = new MergedColumnsInfo();
return (MergedColumnsInfo)ViewState["info"]; }
}

//method for rendering of columns''s headers
private void RenderHeader(HtmlTextWriter output, Control container)
{
for (int i = 0; i < container.Controls.Count; i++)
{
TableCell cell = (TableCell)container.Controls[i];
//stretch non merged columns for two rows
if (!info.MergedColumns.Contains(i))
{
cell.Attributes["rowspan"] = "2";
cell.RenderControl(output);
}
else //render merged columns''s common title
if (info.StartColumns.Contains(i))
{
output.Write(string.Format("

{1}
",
info.StartColumns[i], info.Titles[i]));
}
}

//close first row
output.RenderEndTag();
//set attributes for second row
grid.HeaderStyle.AddAttributesToRender(output);
//start second row
output.RenderBeginTag("tr");

//render second row (only merged columns)
for (int i = 0; i < info.MergedColumns.Count; i++)
{
TableCell cell = (TableCell)container.Controls[info.MergedColumns[i]];
cell.RenderControl(output);
}
}

private DataTable GetDataSource()
{
DataTable table = new DataTable();
table.Columns.Add("Name");
table.Columns.Add("Mathematics", typeof(int));
table.Columns.Add("Georgaphy");
table.Columns.Add("Biology");
table.Columns.Add("Average");

table.Rows.Add(new object[] { "A. Ivanova", 3, 5, 4, 4 });
table.Rows.Add(new object[] { "I. Petrenko", 5, 5, 4, 4.67 });
table.Rows.Add(new object[] { "O. Kovaleva", 5, 3, 5, 4.33 });
table.Rows.Add(new object[] { "R. Bubka", 5, 5, 5, 5 });
return table;
}

#endregion

#region Event Handlers

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//merge second, third and fourth columns with common title "Subjects"
info.AddMergedColumns(new int[] { 1, 2, 3 }, "Subjects");

grid.DataSource = GetDataSource();
grid.DataBind();
}
}
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
//call the method for custom rendering of columns''s headers
if (e.Row.RowType == DataControlRowType.Header)
e.Row.SetRenderMethodDelegate(RenderHeader);
}

public SortDirection dir
{
get
{
if (ViewState["dirState"] == null)
{
ViewState["dirState"] = SortDirection.Ascending;
}
return (SortDirection)ViewState["dirState"];
}
set
{
ViewState["dirState"] = value;
}
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sortingDirection = string.Empty;
if (dir == SortDirection.Ascending)
{
dir = SortDirection.Descending;
sortingDirection = "Desc";
}
else
{
dir = SortDirection.Ascending;
sortingDirection = "Asc";
}

DataView sortedView = new DataView(GetDataSource());
sortedView.Sort = e.SortExpression + " " + sortingDirection;
grid.DataSource = sortedView;
grid.DataBind();
}

#endregion
}
}


这篇关于Que Reg:如何在GridView中对合并的网格列进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆