多个标题行中的Datagridvidew和c#中的多个col [英] Datagridvidew in Multiple Header rows and multiple col in c#

查看:83
本文介绍了多个标题行中的Datagridvidew和c#中的多个col的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

朋友您好我有点问题请帮帮我



我有gridview,其中我想要多个标题和列[都是动态]



赞。



| _ | _ | _ | _ | _ | _ | _ _ _ _ _

| _ | _ | _ | _ | _ | _ | _ _ _ _ _

| _ | _ | _ | _ | _ | _ | _ _ _ _ _

| _ | _ | _ | _ | _ | _ | _ _ _ _ _

| | | | | | |

| | | | | | |

| | | | | | |

| | | | | | |



左侧6栏

和前3行中有一些数字,而在中间gridview你可以改变如图所示,标题和左栏将改变



请帮帮我。

Hello friends i am in little problem please help me out

I have gridview , in which i want multiple header and column [all are Dynamic]

Like .

|_|_|_|_|_|_|_ _ _ _ _
|_|_|_|_|_|_|_ _ _ _ _
|_|_|_|_|_|_|_ _ _ _ _
|_|_|_|_|_|_|_ _ _ _ _
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |

the left hand side 6 column
and in top 3 rows in there their are some number and while in Middle gridview you can change figure as per change figure the header and Left column will change

please help me out.

推荐答案

使用占位符创建表单



Creating a form with placeholder

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:PlaceHolder ID="ph" runat="server">

        </asp:PlaceHolder>
    </div>
    </form>
</body>
</html>







添加GridviewTemplate类



使用System;

使用System.Data;

使用System.Configuration;

使用System.Web;

使用System.Web.Security;

使用System.Web.UI;

使用System.Web。 UI.WebControls;

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

使用System.Web.UI.HtmlControls;



//用于显示模板列的自定义类

公共类GridViewTemplate:ITemplate

{

//变量保持ListItemType的类型。

ListItemType _templateType;



//保存列名的变量。

string _columnName;



//我们定义模板类型的构造函数列名。

public GridViewTemplate(ListItemType类型,字符串colname)

{

//存储模板类型。

_templateType = type;



//存储列名。

_columnName = colname;

}



无效ITemplate.InstantiateIn(System.Web.UI.Control容器)

{

switch(_templateType )

{

case ListItemType.Header:

//创建一个新的标签控件并将其添加到容器中。

Label lbl = new Label(); //分配新的标签对象。

lbl.Text = _columnName; //在标签中指定列的名称。

container.Controls.Add(lbl); //将新创建的标签控件添加到容器中。

break;



case ListItemType.Item:

//创建一个新的文本框控件并将其添加到容器中。

LinkBut​​ton tb1 = new LinkBut​​ton(); //分配新的文本框对象。

// tb1.DataBinding + = new EventHandler(tb1_DataBinding); //附加数据绑定事件。

tb1.Text =更改;

tb1.CommandName =更改; //创建一个大小为4的列。 br />
container.Controls.Add(tb1); //将新创建的文本框添加到容器中。

break;



case ListItemType.EditItem:

//因为,我没有使用任何EditItem,我没有在这里添加任何代码。

break;



case ListItemType.Footer:

CheckBox chkColumn = new CheckBox();

chkColumn.ID =Chk+ _columnName;

container.Controls.Add(chkColumn);

休息;

}

}



///< summary> ;

///这是事件,将在绑定发生时引发。

///

///< param name =sender/>

///< param name =e/>

void tb1_DataBinding(object sender,EventArgs e)

{

TextBox txtdata =(TextBox)发件人;

GridV iewRow container =(GridViewRow)txtdata.NamingContainer;

object dataValue = DataBinder.Eval(container.DataItem,_columnName);

if(dataValue!= DBNull.Value)

{

txtdata.Text = dataValue.ToString();

}

}

}




Add GridviewTemplate class

using System;
using System.Data;
using System.Configuration;
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;

//A customized class for displaying the Template Column
public class GridViewTemplate : ITemplate
{
//A variable to hold the type of ListItemType.
ListItemType _templateType;

//A variable to hold the column name.
string _columnName;

//Constructor where we define the template type and column name.
public GridViewTemplate(ListItemType type, string colname)
{
//Stores the template type.
_templateType = type;

//Stores the column name.
_columnName = colname;
}

void ITemplate.InstantiateIn(System.Web.UI.Control container)
{
switch (_templateType)
{
case ListItemType.Header:
//Creates a new label control and add it to the container.
Label lbl = new Label(); //Allocates the new label object.
lbl.Text = _columnName; //Assigns the name of the column in the lable.
container.Controls.Add(lbl); //Adds the newly created label control to the container.
break;

case ListItemType.Item:
//Creates a new text box control and add it to the container.
LinkButton tb1 = new LinkButton(); //Allocates the new text box object.
// tb1.DataBinding += new EventHandler(tb1_DataBinding); //Attaches the data binding event.
tb1.Text = "Change";
tb1.CommandName = "Change";//Creates a column with size 4.
container.Controls.Add(tb1); //Adds the newly created textbox to the container.
break;

case ListItemType.EditItem:
//As, I am not using any EditItem, I didnot added any code here.
break;

case ListItemType.Footer:
CheckBox chkColumn = new CheckBox();
chkColumn.ID = "Chk" + _columnName;
container.Controls.Add(chkColumn);
break;
}
}

/// <summary>
/// This is the event, which will be raised when the binding happens.
///
/// <param name="sender" />
/// <param name="e" />
void tb1_DataBinding(object sender, EventArgs e)
{
TextBox txtdata = (TextBox)sender;
GridViewRow container = (GridViewRow)txtdata.NamingContainer;
object dataValue = DataBinder.Eval(container.DataItem, _columnName);
if (dataValue != DBNull.Value)
{
txtdata.Text = dataValue.ToString();
}
}
}


代码背后使用以下代码



使用System;

使用System。 Collections.Generic;

使用System.Linq;

使用System.Web;

使用System.Web.UI;

使用System.Web.UI.WebControls;

使用System.Data;

public partial class _Default:System.Web.UI.Page

{

protected void Page_Load(object sender,EventArgs e)

{



}

void Page_Init()

{

GridView gv = new GridView();

gv.ID =gv ;

gv.BorderWidth = 0;

gv.Font.Name =Arial;

gv.Font.Size = 10;

gv.ForeColor = System.Drawing.Color.SteelBlue;

gv.BorderWidth = 0;

gv.AutoGenerateColumns = false;



DataTable dt = new DataTable() ;



DataColumn dc = new DataColumn(ID,typeof(System.Int32));

dc.AutoIncrement = true;

dt.Columns.Add(dc);



dc = new DataColumn(Name,typeof(System.String));

dt.Columns.Add(dc);



dc = new DataColumn(Address,typeof(System.String));

dt.Columns.Add(dc);



dc = new DataColumn(Phone,typeof(System.String));

dt.Columns.Add(dc);



for(int nIndex = 0; nIndex< 10; nIndex ++)

{

//创建一个新行



DataRow drow = dt.NewRow();

//初始化行数据。

drow [Name] =Row-+ Convert.ToString((nIndex + 1));

drow [Address] =Address-+ Convert.ToString((nIndex + 1));

drow [Phone] =Phone-+ Convert.ToString ((nIndex + 1));

//将行添加到数据表中。



dt.Rows.Add(drow);

}



foreach(DataColumn col in dt.Columns)

{



//声明绑定字段并为绑定字段分配内存。



BoundField bfield = new BoundField();







//初始化DataField值。



bfield.DataField = col.ColumnName;

$ / $




//初始化HeaderText字段值。



bfield .HeaderText = col.ColumnName;







//将新创建的绑定字段添加到GridView 。



gv.Columns.Add(bfield);









}





//初始化数据源



TemplateField tf = new TemplateField();

tf.HeaderText =Change;



tf.ItemTemplate = new GridViewTemplate(ListItemType.Item,Change);



gv.Columns.Add(tf);





gv.RowCommand + = gv_RowCommand;



gv.DataSource = dt;







//使用GridView绑定数据表。



gv.DataB ind();



ph.Controls.Add(gv);



}



void gv_RowCommand(object sender,GridViewCommandEventArgs e)

{

if(e.CommandName ==Change)

{

GridView gv =(GridView)ph.FindControl(gv);



GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;



int rIndex = Convert.ToInt32(row.RowIndex);



gv.HeaderRow.Cells [1] .Text =Column 1;

gv.HeaderRow.Cells [2] .Text =Column 2;



if(gv.Rows [rIndex] .Cells [1] .Text ==Row-1)

{

gv.Rows [rIndex] .Cells [1] .Text =行值1;

}

}

}







}
Code behind use the below code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
void Page_Init()
{
GridView gv = new GridView();
gv.ID = "gv";
gv.BorderWidth = 0;
gv.Font.Name = "Arial";
gv.Font.Size = 10;
gv.ForeColor = System.Drawing.Color.SteelBlue;
gv.BorderWidth = 0;
gv.AutoGenerateColumns = false;

DataTable dt = new DataTable();

DataColumn dc = new DataColumn("ID", typeof(System.Int32));
dc.AutoIncrement = true;
dt.Columns.Add(dc);

dc = new DataColumn("Name", typeof(System.String));
dt.Columns.Add(dc);

dc = new DataColumn("Address", typeof(System.String));
dt.Columns.Add(dc);

dc = new DataColumn("Phone", typeof(System.String));
dt.Columns.Add(dc);

for (int nIndex = 0; nIndex < 10; nIndex++)
{
//Create a new row

DataRow drow = dt.NewRow();
//Initialize the row data.
drow["Name"] = "Row-" + Convert.ToString((nIndex + 1));
drow["Address"] = "Address-" + Convert.ToString((nIndex + 1));
drow["Phone"] = "Phone-" + Convert.ToString((nIndex + 1));
//Add the row to the datatable.

dt.Rows.Add(drow);
}

foreach (DataColumn col in dt.Columns)
{

//Declare the bound field and allocate memory for the bound field.

BoundField bfield = new BoundField();



//Initalize the DataField value.

bfield.DataField = col.ColumnName;



//Initialize the HeaderText field value.

bfield.HeaderText = col.ColumnName;



//Add the newly created bound field to the GridView.

gv.Columns.Add(bfield);




}


//Initialize the DataSource

TemplateField tf = new TemplateField();
tf.HeaderText = "Change";

tf.ItemTemplate = new GridViewTemplate(ListItemType.Item, "Change");

gv.Columns.Add(tf);


gv.RowCommand += gv_RowCommand;

gv.DataSource = dt;



//Bind the datatable with the GridView.

gv.DataBind();

ph.Controls.Add(gv);

}

void gv_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Change")
{
GridView gv = (GridView) ph.FindControl("gv");

GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer;

int rIndex = Convert.ToInt32(row.RowIndex);

gv.HeaderRow.Cells[1].Text = "Column 1";
gv.HeaderRow.Cells[2].Text = "Column 2";

if (gv.Rows[rIndex].Cells[1].Text == "Row-1")
{
gv.Rows[rIndex].Cells[1].Text = "Row value 1";
}
}
}



}


这篇关于多个标题行中的Datagridvidew和c#中的多个col的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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