这个问题虽然比较实际,但是无意义。除非gridview只用于列表显示,不做交互。否则一些刷新操作重新绑定的操作会显示出错。
gridview的显示可以达到这个效果:
怎么做到的呢?
首先 page_load
if (!IsPostBack)
{
setGridViewStyle();
setFields();
}
setGridViewStyle
//设置GridView外观格式
private void setGridViewStyle()
{
gvApplyList.AutoGenerateColumns = false;
string[] KeyNames = new string[] { "Sheet_ID"};
gvApplyList.DataKeyNames = KeyNames;
}
setFields
//设置GridView字段
private void setFields()
{
//创建命令字段
CommandField editField = new CommandField();
editField.ButtonType = ButtonType.Button;
editField.ShowSelectButton = true;
editField.SelectText = "操作";

//创建数据绑定字段
BoundField sheetNRBField = new BoundField();
BoundField startDTField = new BoundField();
BoundField endDTField = new BoundField();
BoundField dirGrpNameTField = new BoundField();
BoundField outDestField = new BoundField();
TemplateField appNoteField = new TemplateField();

sheetNRBField.DataField = "sheet_NBR";
sheetNRBField.HeaderText = "编号";

startDTField.DataField = "Start_DT";
startDTField.HeaderText = "开始时间";

endDTField.DataField = "End_DT";
endDTField.HeaderText = "结束时间";

dirGrpNameTField.DataField = "dir_Grp_Name";
dirGrpNameTField.HeaderText = "方向";

outDestField.DataField = "out_Dest";
outDestField.HeaderText = "目的地";

appNoteField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "事由");

//将字段添加到GridView
gvApplyList.Columns.Add(editField);
gvApplyList.Columns.Add(sheetNRBField);
gvApplyList.Columns.Add(dirGrpNameTField);
gvApplyList.Columns.Add(outDestField);
gvApplyList.Columns.Add(startDTField);
gvApplyList.Columns.Add(appNoteField);
gvApplyList.Columns.Add(endDTField);

}
重定义自定义字段模式
//模板类产生器,以创建模板字段
public class GridViewTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;

public GridViewTemplate(DataControlRowType rowtype, string colname)
{
templateType = rowtype;
columnName = colname;
}

public void InstantiateIn(System.Web.UI.Control container)
{
if (templateType == DataControlRowType.DataRow)
{
TextBox txtAppNote = new TextBox();
switch (columnName)
{
case "事由":
txtAppNote.DataBinding += new EventHandler(txtAppNote_DataBinding);
txtAppNote.Width = 300;
txtAppNote.ReadOnly = true;
container.Controls.Add(txtAppNote);
break;
}
}
}

void txtAppNote_DataBinding(object sender, EventArgs e)
{
TextBox txtAppNote = (TextBox)sender;
GridViewRow row = (GridViewRow)txtAppNote.NamingContainer;
txtAppNote.Text = DataBinder.Eval(row.DataItem, "App_Note").ToString();
}
}
创建表头 创建数据行
//创建GridView表头
protected void gvApplyList_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
TableCellCollection tc = e.Row.Cells;
tc.Clear();

tc.Add(new TableHeaderCell());
tc[0].Attributes.Add("rowspan", "2");
tc[0].Text = "申请单";

tc.Add(new TableHeaderCell());
tc[1].Text = "编号";

tc.Add(new TableHeaderCell());
tc[2].Text = "方向";

tc.Add(new TableHeaderCell());
tc[3].Text = "目的地";

tc.Add(new TableHeaderCell());
tc[4].Attributes.Add("rowspan", "2");
tc[4].Text = "时间</th></tr></tr>";

tc.Add(new TableHeaderCell());
tc[5].Attributes.Add("colspan","3");
tc[5].Text = "事由";

}
}
//创建数据行
protected void gvApplyList_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].RowSpan = 2;
e.Row.Cells[0].RowSpan = 2;
e.Row.Cells[4].Text += "</td></tr><tr>";
e.Row.Cells[5].ColumnSpan = 3;
}
gridview前台就这么调用:
<asp:GridView ID="gvApplyList" runat="server" OnRowCreated="gvApplyList_RowCreated" OnRowDataBound="gvApplyList_RowDataBound">
选择行操作后,刷新gridview
protected void gvApplyList_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
setFields();
}
不过实际运行的时候,点击操作后,gridview变成:
不是原来的结果了。 看来是自定义字段显示出错了。
gridview的显示可以达到这个效果:
申请单 | 编号 | 方向 | 目的地 | 时间 |
---|---|---|---|---|
事由 | ||||
NT200708300100044 | 市内方向 | 开发区 | 2007-8-31 8:00:00 | |
2007-8-31 18:30:00 | ||||
NT200708310100048 | 市内方向 | 开发区 | 2007-9-1 8:00:00 | |
2007-9-1 18:30:00 | ||||
NT200708310100049 | 省内方向 | 南京 | 2007-9-1 8:00:00 | |
2007-9-1 18:30:00 |
怎么做到的呢?
首先 page_load





setGridViewStyle







setFields












































重定义自定义字段模式




































创建表头 创建数据行









































选择行操作后,刷新gridview




不过实际运行的时候,点击操作后,gridview变成:
申请单 | 编号 | 方向 | 目的地 | 时间 |
---|---|---|---|---|
事由 | ||||
NT200708300100044 | 市内方向 | 开发区 | 2007-8-31 8:00:00 | |
2007-8-31 18:30:00 | ||||
NT200708310100048 | 市内方向 | 开发区 | 2007-9-1 8:00:00 | |
2007-9-1 18:30:00 | ||||
NT200708310100049 | 省内方向 | 南京 | 2007-9-1 8:00:00 | |
2007-9-1 18:30:00 |
不是原来的结果了。 看来是自定义字段显示出错了。
分类:
项目开发日志
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义