例如GridView绑定了三列,这个数据是动态绑定,自动生成绑定列,请问要怎么判断每列的类型,如果是数字类型就统一靠右,如果是字符串靠左,如果是特定的格式,如日期,那就居中,请问如何实现?
这个功能有几个难点:
1.列是动态绑定的,很难获取到列
2.怎么判断这列是什么类型,有可能第一列是数字,第二列是字符串?
名字 月薪 时间
张一 2000 2010-4-22
李三 2100 2010-4-22
兆光 1800 2010-4-22
这个功能有几个难点:
1.列是动态绑定的,很难获取到列
2.怎么判断这列是什么类型,有可能第一列是数字,第二列是字符串?
名字 月薪 时间
张一 2000 2010-4-22
李三 2100 2010-4-22
兆光 1800 2010-4-22
解决方案 »
- 分页问题,分页没效果
- 没有可用的错误消息,结果代码: E_FAIL(0x80004005)。 在线等待。。。高分求解....
- asp.net 如何实现图片切换.就象这个网站上的那样http://www.liyuan.gov.cn/default.htm
- 怎么在一个页面里实现多种分类?
- 如果引用Datalist中控件ID的小问题
- 封装DropDownList,怎么做?
- 有谁用过《asp.net高级编程 发现问题-提出问题-解决问题》,项目打不开
- _____关于音/视频播放器的一个问题,谢谢
- 一個特急問題,向各位大蝦求教
- 求:验证手机号码正确性的正则表达式
- 截取数据库名字
- 这个例子中实体类的多表查询语句怎么写?Include("table")有什么用?
//增加RowDataBound事件
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow row = e.Row;
if (row.RowType == DataControlRowType.DataRow)
{
//能确定列的位置吗?,哪列是数字、字符串、日期
row.Cells[0].HorizontalAlign = HorizontalAlign.Right;
row.Cells[1].HorizontalAlign = HorizontalAlign.Left;
row.Cells[2].HorizontalAlign = HorizontalAlign.Center; //不能确定的话
for (int i = 0; i < row.Cells.Count; i++)
{
//判断row.Cells[i].Text是数字、字符串、日期,判断的方法自己写
//修改HorizontalAlign
}
}
}
你好,我的想法和你的有点区别,你的事件是循环行,其实我只要判断列类型就好了
因为我的列是自动生成的,就是说直接判断DataTable每列的类型就好了,可以解决数字和字符串,但是没办法解决特定格式的数据列,例如:日期,因为我把日期取出来的时候,为了限定统一格式Convert(Nvarchar(10),Getdate(),120) ,所以得到的结果就变成字符串了,如果不转的话,格式无法统一,请大家帮我想想办法private void OverrideGridViewStyle()
{
DataTable dt = DeserializeXmlFileDataTable("Sys_user");
foreach (DataColumn dc in dt.Columns)
{
Type t = dc.DataType;
}
}
现在的难点变成GridView自动生成列,怎么才能获取到?在Columns集合内没有,请问怎么处理?
2.你不要在后台数据库中做任何类型处理,处理放在.net这里,比如说DateTime你可以通过格式化得到你想样的格式
我的意思很简单,我通过代码去循环GridView列集合,但是自动生成列是不会在GridView列集合里的,不知道你明白我的意思了没?
是按照sql语句,如果是*,就按照数据库表的字段顺序排。
如果是自己写的几个字段,就按写的排。这样怎么会不知道哪个字段的顺序?
1.在监视里看gv_TestDataBind.Columns的Count
2.页面最后呈现出来的是多少列,因为第一列是模板列,固定的,所以取得到,自动生成列就取不到
private void OverrideGridViewStyle()
{
DataTable dt = DeserializeXmlFileDataTable("Sys_user");
foreach (DataColumn dc in dt.Columns)
{
foreach (DataControlField dcf in gv_TestDataBind.Columns)
{
if (dcf.HeaderText.Trim() == dc.ColumnName.Trim())
{
switch (dc.DataType.ToString().Trim())
{
case "System.Int32":
{
dcf.ItemStyle.HorizontalAlign = HorizontalAlign.Right;
break;
}
case "System.String":
{
dcf.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
break;
}
}
}
}
}
}
<asp:GridView ID="GridView1" runat="server" Width="600px" OnRowDataBound="GridView1_RowDataBound" AutoGenerateColumns="True" DataSourceID="ObjectDataSource1">
</asp:GridView> protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow row = e.Row;
if (row.RowType == DataControlRowType.DataRow)
{
//能确定列的位置吗?,哪列是数字、字符串、日期
row.Cells[0].HorizontalAlign = HorizontalAlign.Right;
row.Cells[1].HorizontalAlign = HorizontalAlign.Left;
row.Cells[2].HorizontalAlign = HorizontalAlign.Center;
}
}
你是否知道数据库,字段的顺序。我刚才也试验了,这样是可以设置的。
1.先判断gridview列名==DataTable列名,然后在取DataTable当前列的类型,再判断是int,还是string选择靠左还是右
我的代码
protected void gv_TestDataBind_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.Header)
{
DataTable dt = DeserializeXmlFileDataTable("Sys_user");
foreach (TableCell tc in e.Row.Cells)
{
foreach (DataColumn dc in dt.Columns)
{
if (tc.Text.Trim() == dc.ColumnName.Trim())
{
switch (dc.DataType.ToString().Trim())
{
case "System.Int32":
{
tc.HorizontalAlign = HorizontalAlign.Right;
break;
}
case "System.String":
{
tc.HorizontalAlign = HorizontalAlign.Left;
break;
}
}
}
}
}
}
}如果是按照这样的写法,那就有个新问题,在RowType==DataRow的范围内,怎么取到Header的值