datagirdview 控件有这个功能没??

sjrw96004 2014-07-08 09:43:34
dgv绑定的dt表只检索单行数据,但有三十多个列
能不能在DGV里面分三行,每行十列显示数据,这样可以避免横滚动条,方便在一屏查看:
例如:
一个DGV中如下显示:
列1 ……………………列10
值1........………………值10

列11……………………列20
值11……………………值20

列21……………………列30
值21……………………值30

下部无滚动条
...全文
205 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fudashouyao 2014-07-10
  • 打赏
  • 举报
回复
如果只是显示还好处理,如果又要对DVG的数据做处理就比较麻烦了。 一条数据拆成3条。绑定到一个新的数据集上面,然后把新的数据集绑定到DVG上面
於黾 2014-07-10
  • 打赏
  • 举报
回复
不过你要保证所有对应列的类型一致 或者dr1[j]=dr[i*10+j].ToString(); 全部当字符串显示
於黾 2014-07-10
  • 打赏
  • 举报
回复

datatable dt1=new datatable();
for(int l=0;l<10;l++)
{
dt1.columns.add(列名);
}
foreach(datarow dr in dt.rows)
{
for(int i=0;i<3;i++)
{
datarow dr1=dt1.newrow();
for(int j=0;j<10;j++)
{
dr1[j]=dr[i*10+j];
}
dt1.rows.add(dr1);
}
}
於黾 2014-07-10
  • 打赏
  • 举报
回复
引用 5 楼 sjrw96004 的回复:
[quote=引用 3 楼 Z65443344 的回复:] 30个列列名不同,你想直接绑成那样是不行的 要么修改SQL语句,使数据源就分3行 要么新建个datatable,将30列的dt循环赋值给10列的dt1 然后绑定dt1
引用 3 楼 Z65443344 的回复:
30个列列名不同,你想直接绑成那样是不行的 要么修改SQL语句,使数据源就分3行 要么新建个datatable,将30列的dt循环赋值给10列的dt1 然后绑定dt1
我以前就是这么干的,将 dt拆成三个,分别给3个dvg绑定显示[/quote] 你不是想用1个DVG显示么,干嘛拆成3个. 只要把30列的dt后20个字段的值循环赋值给dt1的第2行和第3行,不就得了 这样dt有30列,假如是100行,那么dt1有10列,300行
jiaoya_2638125250 2014-07-10
  • 打赏
  • 举报
回复
DataGirdView控件设置显示数据格式 //绑定显示数据 private void Frm_Main_Load(object sender, EventArgs e) { dgv_Message.DataSource = new List<Fruit>() {//绑定数据集合 new Fruit(){Name="苹果",Price=30}, new Fruit(){Name="橘子",Price=40}, new Fruit(){Name="鸭梨",Price=33}, new Fruit(){Name="水蜜桃",Price=31}}; dgv_Message.Columns[0].Width = 200;//设置列宽度 dgv_Message.Columns[1].Width = 170;//设置列宽度 dgv_Message.Columns[1].DefaultCellStyle.Format = "c";//设置内容格式 }//CodeGo.net/ // 使用代码编辑器修改此方法的内容。 /// </summary> private void InitializeComponent() { this.dgv_Message = new System.Windows.Forms.DataGridView(); ((System.ComponentModel.ISupportInitialize)(this.dgv_Message)).BeginInit(); this.SuspendLayout(); // // dgv_Message // this.dgv_Message.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgv_Message.Dock = System.Windows.Forms.DockStyle.Fill; this.dgv_Message.Location = new System.Drawing.Point(0, 0); this.dgv_Message.Name = "dgv_Message"; this.dgv_Message.RowTemplate.Height = 23; this.dgv_Message.Size = new System.Drawing.Size(415, 171); this.dgv_Message.TabIndex = 0; // // Frm_Main // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(415, 171); this.Controls.Add(this.dgv_Message); this.Name = "Frm_Main"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "在DataGridView控件中设置数据显示格式"; this.Load += new System.EventHandler(this.Frm_Main_Load); ((System.ComponentModel.ISupportInitialize)(this.dgv_Message)).EndInit(); this.ResumeLayout(false); }
bdmh 2014-07-09
  • 打赏
  • 举报
回复
第一,用sql得行转列,转为符合自己格式的数据集
第二,得到标准数据集,自己填充到grid,不是绑定数据集
於黾 2014-07-09
  • 打赏
  • 举报
回复
30个列列名不同,你想直接绑成那样是不行的 要么修改SQL语句,使数据源就分3行 要么新建个datatable,将30列的dt循环赋值给10列的dt1 然后绑定dt1
sjrw96004 2014-07-09
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
30个列列名不同,你想直接绑成那样是不行的 要么修改SQL语句,使数据源就分3行 要么新建个datatable,将30列的dt循环赋值给10列的dt1 然后绑定dt1
引用 3 楼 Z65443344 的回复:
30个列列名不同,你想直接绑成那样是不行的 要么修改SQL语句,使数据源就分3行 要么新建个datatable,将30列的dt循环赋值给10列的dt1 然后绑定dt1
我以前就是这么干的,将 dt拆成三个,分别给3个dvg绑定显示
threenewbee 2014-07-08
  • 打赏
  • 举报
回复
那就不要绑定,手工循环。 还有一个办法就是修改查询语句,用rownumber加上行号,然后groupby,使得查询出来的数据就是每行有三行的。
wind_cloud2011 2014-07-08
  • 打赏
  • 举报
回复
可用不同的颜色来分层显示

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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