将摘要添加到Windows窗体应用程序中的datagridview

时间:2014-01-26 12:51:25

标签: c# winforms datagridview

我想在我的最后一行下面的datagridview中添加一行,显示记录的摘要。所以我填充我的数据集,然后在其中添加一行,之后我将它绑定到datagridview然后当我尝试分配我的带有值的新行它给了我错误,无法将日期时间转换为字符串为第四列数据类型是datetime.SO我的问题是我们可以更改特定行单元格的列类型,如果不是那么我怎样才能实现我想做的事情?

  string SelectGroupQuery = "Select * From GroupMembers Where GID=@Id ";
                            using (SqlConnection conGroup = new SqlConnection(ConnectionString.ToString()))
                            {
                                using (SqlCommand commandGroup = new SqlCommand(SelectGroupQuery, conGroup))
                                {
                                    commandGroup.CommandType = CommandType.Text;
                                    commandGroup.Parameters.Add(new SqlParameter("Id", Id));
                                    SqlDataAdapter da = new SqlDataAdapter(commandGroup);
                                    DataSet ds = new DataSet();
                                    da.Fill(ds);
                                    d1 = new DataGridView();
                                    this.Controls.Add(d1);
                                    d1.Location = new Point(50,y);
                                    d1.Size = new Size(600, 300);
                                    dr = ds.Tables[0].NewRow();
                                    ds.Tables[0].Rows.Add(dr);
                                    d1.DataSource = ds.Tables[0];
                                    d1.Columns[4].ValueType = typeof(string);
                                    d1.Rows[d1.Rows.Count-2].Cells[4].Value = "Total Amount";
                                    y = y + 400;
                                }
                            }

2 个答案:

答案 0 :(得分:0)

可以为某些列类型更改特定单元格的类型。请参阅this回答。但我不推荐它。

datagridview中使用行来显示摘要是很棘手的,因为它会带来一些问题(绑定到数据库时更多)。您可以使用datagridview外部的文本框创建摘要行,并将摘要数据添加到它们。检查this codeproject链接以获取工作示例。

答案 1 :(得分:0)

您可以通过处理CellFormatting事件来伪造它,而不是将值赋给单元格。如果e.ColumnIndex = 4且e.RowIndex是网格中的最后一行,请将格式化的值设置为您想要的标签,并设置EventArgs的属性以告诉您格式化了该值。

如果您没有将整个DataGridView设置为只读,那么您可能还希望处理CellBeginEdit事件并取消编辑(如果它是摘要行)。