请问DataGrid能不能有两个标题行?
就是除了默认的标题行外,再给他添加一个标题行。
主要是想实现某些列跨2行的标题行的效果,当然也可以按照孟子前辈的方法在上面构建一个Table,下面放DataGrid,但是还想试试这种方法。
如果可以的话,那么就可以在DataGrid的ItemCreated方法里写以下代码了.
TableCell cell = (TableCell)e.Item.Cells[0];
cell.RowSpan = 2;
请指教.谢谢
问题点数:20、回复次数:10Top
1 楼saucer(思归)回复于 2004-09-01 03:33:01 得分 20
yes, try
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat='server'>
void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlDataAdapter da = new SqlDataAdapter("select * from authors", "server=localhost;database=pubs;uid=sa;pwd=;");
DataTable dt = new DataTable();
da.Fill(dt);
DataGrid1.DataSource= dt.DefaultView;
DataGrid1.DataBind();
}
}
private void AddHeaderRow()
{
Table t = (Table)DataGrid1.Controls[0];
DataGridItem tr = new DataGridItem(0,0,ListItemType.Header);
TableCell tc = new TableCell();
tc.ColumnSpan = 3;
tc.Text = "hello world";
tc.BackColor = System.Drawing.Color.Red;
tc.HorizontalAlign = HorizontalAlign.Center;
tr.Cells.Add(tc);
TableCell tc2 = new TableCell();
tc2.ColumnSpan = 6;
tc2.BackColor = System.Drawing.Color.Green;
tc2.Text = "multiple columns";
tc2.HorizontalAlign = HorizontalAlign.Center;
tr.Cells.Add(tc2);
t.Rows.AddAt(0,tr);
}
void DataGrid1_ItemCreated(Object sender, DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Header)
{
AddHeaderRow();
}
}
</script>
<form runat="server">
<asp:TextBox runat="server" />
<asp:DataGrid id="DataGrid1" runat="server" OnItemCreated="DataGrid1_ItemCreated"/>
<asp:Button runat=server Text="Refresh" />
</form>Top
2 楼triout(笨牛)回复于 2004-09-01 08:27:43 得分 0
默认情况是不可以的。
你可以
1——
通过自定义列自定义列头,实现假的双行列标题
2——
改写DATAGRID控件
3——
自己写类DATAGRID的控件实现这样的功能。Top
3 楼jamzh(Show me the money!!!)回复于 2004-09-01 09:11:33 得分 0
写一个函数先将数据搜出来。找出相同的记录,然后合并单元格。原来做过,不过没有代码了!Top
4 楼onlytiancai(谁染枫林醉)回复于 2004-09-01 09:23:57 得分 0
很不错,经典,收藏了,asp.net pro杂志上有介绍Top
5 楼conghui(万物苏醒)回复于 2004-09-01 09:26:06 得分 0
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
ListItemType elemType = e.Item.ItemType;
if (elemType == ListItemType.Pager)
{
if (m_CreatePageTimes == 0)
{
TableCell cellPerson = (TableCell) e.Item.Controls[0];
cellPerson.Controls.Clear();
cellPerson.BackColor = Color.Navy;
cellPerson.ForeColor = Color.Yellow;
cellPerson.ColumnSpan = 2;
cellPerson.HorizontalAlign = HorizontalAlign.Center;
cellPerson.Controls.Add(new LiteralControl("个人信息"));
TableCell cellJob = new TableCell();
cellJob.BackColor = Color.Navy;
cellJob.ForeColor = Color.Yellow;
cellJob.ColumnSpan = 2;
cellJob.HorizontalAlign = HorizontalAlign.Center;
cellJob.Controls.Add(new LiteralControl("工作信息"));
e.Item.Controls.Add(cellJob);
m_CreatePageTimes ++;
}
else if(m_CreatePageTimes ==1)
{
// create custom pager UI
}
}
}
这就是triout(笨牛) 所说的
1——
通过自定义列自定义列头,实现假的双行列标题
Top
6 楼vzxq(灵感人)回复于 2004-09-01 09:29:58 得分 0
studyTop
7 楼lufree(荆州城公子三求计,博望坡军师初用兵)回复于 2004-09-01 09:31:16 得分 0
upTop
8 楼amami(那那咪)回复于 2004-09-01 09:34:45 得分 0
markTop
9 楼lufree(荆州城公子三求计,博望坡军师初用兵)回复于 2004-09-02 01:37:14 得分 0
upTop
10 楼kld3000(Never Say Never)回复于 2004-09-02 07:28:23 得分 0
http://dev.csdn.net/develop/article/27/27465.shtm
这里说的比较详细了
不懂的话再问Top




