获得gridView中列的绑定字段的值

lonelySurvive 2009-01-12 09:15:40
<asp:BoundField DataField="employeeId" HeaderText="员工编号" />
<asp:BoundField DataField="firstName" HeaderText="名字" />
<asp:BoundField DataField="lastName" HeaderText="姓氏" />

解决这个问题有很多方法,但我觉得这样是最好的解决!
说起这个问题就有点长了,但最后归结到要得到绑定字段的值,就是如何得到DataField得值

问题起源是这样的,我想把GridView导出成Excel,但GridView有分页的话就只能导出当前页,所以为了解决这个问题改成导数据源,
就是导DataTable,但导DataTabl成Excel后列的名字却和数据库中的表一样是英文,1是不安全了,2也不可能给用户看英文的名字,
为了解决这个问题就必须自己构造DataTable,但需要导出成Excel的页面很多,我已经把导出Excel的关键代码写到公共类中了,只需要传个
Datatable和导出后的名字就行,所以必须在传之前自己把列的名字改成中文,这里我又想偷懒了,不想在每个页面写 SQL的AS语句,而且也不可能自己,
因为我是根据用户的筛选得到的GridView,当用户晒选的时候需要用ViewState把查询语句保存起来,然后在点导出成Excel后的按钮后读取那个StateView
然后在通过次语句获得一个Datatable,方能和GridView是一样的视图,然后要做的就是把列变成中文的,其实在GridView中已经把它变成中文的了,
我就利用这一点对DataTable进行修改

for (int i = 0; i < dt.Columns.Count; i++)
{
dt.Columns[i].ColumnName = GridView1.Columns[i].ToString();
}

说到这里你会觉得不是解决了吗?但问题又来了,我如果在GridView中增加个选择列或者编辑列,且不是排在GridView最后几列的时候,(第1列,或者第2列)
这样做明显就会出错,所以我想不用这种按顺序来改变的思路,而是用匹配的思路
       for (int i = 0; i < dt.Columns.Count; i++)
{
for (int j = 0; j < GridView1.Columns.Count; j++)
{
if (dt.Columns[i].ColumnName == GridView1.Columns[j].DataField)
{
dt.Columns[i].ColumnName = GridView1.Columns[i].ToString();
}
}
}

注意我加粗那个地方,是错的,但我希望这样。
...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rodgerluo 2009-01-15
  • 打赏
  • 举报
回复
protected void LinkExec_Click(object sender, EventArgs e)
{
//ProExport("application/ms-excel", "問卷回覆明細(回覆筆數).xls");
Genuine.WebModules.WebCustService.ExcelHelp excel = new Genuine.WebModules.WebCustService.ExcelHelp();

excel.Page = this.Page;
DataTable dt = InitData().Tables[0];
dt.Columns["ComNO"].ColumnName = "公司代號";
dt.Columns["EMPCompanyName"].ColumnName = "公司名稱";
dt.Columns["RealName"].ColumnName = "回覆人";
dt.Columns["Tel"].ColumnName = "聯絡電話";
dt.Columns["Subject"].ColumnName = "主題內容";

dt.Columns.RemoveAt(8);
dt.Columns["SignTime"].ColumnName = "回覆時間";
dt.Columns["Content"].ColumnName = "意見";
dt.Columns["AnswerName"].ColumnName = "捷元回覆人";
dt.Columns["AnswerTime"].ColumnName = "捷元回覆時間";

excel.DataSource = dt;
excel.FileName ="問卷回覆明細(回覆筆數).xls";
excel.OutExcel();

}
lonelySurvive 2009-01-13
  • 打赏
  • 举报
回复
我就没看出清晰在哪呢?
还有那么多人顶

foreach(GridViewRow grinGridView1.Rows)
{stringstr=gr.Cells[4].Text;

}
这个意思是遍历每一行然后某一列的值读出来
che2piaopiao 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiang_jiajia10 的回复:]
C# codeforeach(GridViewRow grinGridView1.Rows)
{stringstr=gr.Cells[4].Text;

}
[/Quote] mark
HDNGO 2009-01-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jiang_jiajia10 的回复:]
C# code
foreach (GridViewRow gr in GridView1.Rows)
{

string str = gr.Cells[4].Text;

}
[/Quote]

这样比较清晰
jiang_jiajia10 2009-01-13
  • 打赏
  • 举报
回复

foreach (GridViewRow gr in GridView1.Rows)
{

string str = gr.Cells[4].Text;

}
cwmwss 2009-01-13
  • 打赏
  • 举报
回复
不知道给datatable的Caption赋值,能不能解决导出有Excel的标题是英文的问题

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧