DataGridView数据统计操作

合集下载

datagridview技巧

datagridview技巧

datagridview技巧DataGridView是Windows Forms中常用的控件之一,可以在应用程序中展示和编辑表格数据。

下面介绍一些DataGridView的技巧。

1. 在DataGridView中添加数据:可以通过代码动态添加数据,也可以将数据源绑定到DataGridView上。

使用DataSource属性可以绑定数据源,也可以手动遍历数据,使用Rows和Cells属性来添加数据。

2. 设置列样式:可以通过DataGridView的Column属性设置列的样式和属性,如宽度、标题文本、数据类型等。

还可以通过DefaultCellStyle属性设置列的默认单元格样式。

3. 单元格格式和数据验证:可以通过CellFormatting事件来自定义单元格的显示格式,如日期格式、货币格式等。

还可以通过CellValidating事件来验证用户输入的数据,并给出提示。

4. 排序和筛选:可以通过Sort方法对DataGridView中的数据进行排序。

还可以使用AutoFilter属性启用或禁用列标题的自动筛选功能,方便用户筛选数据。

5. 选择和编辑:可以通过SelectionMode属性设置选择模式,如单选、多选等。

还可以通过ReadOnly属性设置是否允许用户编辑单元格。

另外,还可以通过SelectedCells和SelectedRows属性获取用户选择的单元格或行。

6. 自定义单元格和行样式:可以通过CellPainting和RowPostPaint事件来自定义单元格和行的样式,如背景色、字体等。

可以根据特定的条件来改变单元格或行的样式,以提升用户体验。

7. 导出数据:可以通过DataGridView的GetClipboardContent方法将DataGridView中的数据导出为文本或HTML格式,方便数据的导出和共享。

以上是一些常用的DataGridView技巧,希望对您有帮助。

datagridview用法

datagridview用法

DataGridView用法1.概述D a ta Gr id Vi ew是Wi n do ws Fo rm s中一种常用的控件,用于展示和编辑表格数据。

本文将介绍Da ta Gr id Vi ew的基本用法和常用功能。

2.基本用法2.1创建D a t a G r i d V i e w要使用D at aG ri dVi e w,首先需要在窗体上进行控件的创建和初始化。

可以通过拖拽控件到窗体上或者在代码中动态创建控件。

2.2数据绑定在D at aG ri dV ie w中展示数据通常需要进行数据绑定。

可以通过设置D a ta So ur ce属性来实现数据绑定,可以绑定Da ta Ta bl e、B i nd in gS ou rc e等数据源。

2.3列定义可以通过列定义来指定D at aG ri dV ie w中的列数、列名、列类型等属性。

可以使用Da ta Gr i dV ie w的Co lu mns集合来对列进行操作。

2.4行操作可以通过Da ta Gr idV i ew的R ow s集合对行进行操作,如添加、删除、插入等操作。

可以根据行索引或行对象进行操作。

3.常用功能3.1样式设置可以通过设置Da ta Gr i dV ie w的Ce ll Sty l e、C o lu mn He ad er De fau l tC el lS ty le、R ow H ea de rs De fa ul tCe l lS ty le等属性来设置样式,如背景色、字体、对齐方式等。

3.2单元格编辑D a ta Gr id Vi ew可以方便地对单元格进行编辑,可以根据需要设置单元格的可编辑性,只读属性等。

可以通过事件处理程序来实现特定单元格的编辑操作。

3.3排序和筛选D a ta Gr id Vi ew提供了对数据进行排序和筛选的功能。

可以通过设置A l lo wS or ti ng属性来启用排序功能,通过设置A l lo wU se rT oF il ter C ol um ns属性来启用筛选功能。

C#——DataGridView控件的各种操作总结(单元格操作,属性设置)

C#——DataGridView控件的各种操作总结(单元格操作,属性设置)

C#——DataGridView控件的各种操作总结(单元格操作,属性设置)⼀、单元格内容的操作*****// 取得当前单元格内容Console.WriteLine(DataGridView1.CurrentCell.Value);// 取得当前单元格的列 IndexConsole.WriteLine(DataGridView1.CurrentCell.ColumnIndex);// 取得当前单元格的⾏ IndexConsole.WriteLine(DataGridView1.CurrentCell.RowIndex);*******另外,使⽤ DataGridView.CurrentCellAddress 属性(⽽不是直接访问单元格)来确定单元格所在的⾏:DataGridView.CurrentCellAddress.Y 和列: DataGridView.CurrentCellAddress.X 。

这对于避免取消共享⾏的共享⾮常有⽤。

当前的单元格可以通过设定 DataGridView 对象的 CurrentCell 来改变。

可以通过 CurrentCell 来设定DataGridView 的激活单元格。

将 CurrentCell 设为 Nothing(null) 可以取消激活的单元格。

// 设定 (0, 0) 为当前单元格DataGridView1.CurrentCell = DataGridView1[0, 0];在整⾏选中模式开启时,你也可以通过 CurrentCell 来设定选定⾏。

/// <summary>/// 向下遍历/// </summary>/// <param ></param>/// <param ></param>private void button4_Click(object sender, EventArgs e)...{int row = this.dataGridView1.CurrentRow.Index + 1;if (row > this.dataGridView1.RowCount - 1)row = 0;this.dataGridView1.CurrentCell = this.dataGridView1[0, row];}/// <summary>/// 向上遍历/// </summary>/// <param ></param>/// <param ></param>private void button5_Click(object sender, EventArgs e)...{int row = this.dataGridView1.CurrentRow.Index - 1;if (row < 0)row = this.dataGridView1.RowCount - 1;this.dataGridView1.CurrentCell = this.dataGridView1[0, row];}* 注意: this.dataGridView 的索引器的参数是: columnIndex, rowIndex 或是 columnName, rowIndex这与习惯不同。

C#Winform中自定义筛选及自带统计行的Datagridview控件

C#Winform中自定义筛选及自带统计行的Datagridview控件

C#Winform中⾃定义筛选及⾃带统计⾏的Datagridview控件
⽹上分享有很多种⾃制DGV控件,都有不⼩的缺陷。

没办法,按需求⾃⼰定制了⼀个。

⼀、过滤⽅⾯类似于Excel的筛选功能。

⽀持右键菜单筛选,同时也⽀持在⽂本框输⼊⽂字按焦点列进⾏筛选;
⼆、统计⾏我采⽤的是双Datagridview⽅案。

在构建控件时加⼊⼀个Dock为Bottom的⼦Datagridview作为统计⾏,并与主控件横向Scroll时保持⼀致滚动即可。

这个设计时有个⼩阻碍在于:主DGV最下⾯⼀⾏数据会被统计⾏遮挡住显⽰不出来,最后通过调整尾⾏的⾼度解决了此问题。

三、此外,还加⼊了右键复制、含标题复制、动态加总选中单元格数字、粘贴数据等便捷功能。

dataGridView的用法

dataGridView的用法

dataGridView的用法dataGridView的几个基本操作:1、获得某个(指定的)单元格的值:dataGridView1.Row[i].Cells[j].Value;2、获得选中的总行数:dataGridView1.SelectedRows.Count;3、获得当前选中行的索引:dataGridView1.CurrentRow.Index;4、获得当前选中单元格的值:dataGridView1.CurrentCell.Value;5、取选中行的数据string[] str = new string[dataGridView.Rows.Count];for(int i;i<datagridview1.rows.count;i++)< bdsfid="75" p=""></datagridview1.rows.count;i++)<>{if(dataGridView1.Rows[i].Selected == true){str[i] = dataGridView1.Rows[i].Cells[1].Value.ToString();}}7、获取选中行的某个数据int a = dataGridView1.SelectedRows.Index;dataGridView1.Rows[a].Cells["你想要的某一列的索引,想要几就写几"].Value;int a=dataGridView1.CurrentRow.Index;stringstr=dataGridView1.Row[a].Cells["strName"].Value.T ostring();DataRowState rowState=new DataRowState ();DataTable dt=(DataTable)this.dgvStudentInfo .DataSource ;for (int i = 0; i < dt.Rows.Count; i++){//rowState == DataRowState.Added || rowState == DataRowState.Detached ||if (rowState == DataRowState.Modified){//dt.Rows[i].Delete();//dt.ImportRow(dt.Rows[i]);//dgvStudentInfo.DataSource = dt;//dgvStudentInfo.Refresh();bllStudent.Update(stuModel);}}选中行的某个数据//string stuid = dgvStuInfo.Rows[0].Cells[0].Value.T oString();//int id = this.dgvStuInfo.CurrentRow.Cells[0].RowIndex;//string stuid = this.dgvStuInfo.Rows[id].Cells[0].Value.ToString();。

sunnyui datagridview详细用法

sunnyui datagridview详细用法

sunnyui datagridview详细用法DataGridView是Windows Forms中的一个常用的控件,用于显示和编辑数据。

它提供了直观、易于使用的界面,用于显示和编辑表格数据。

在SunnyUI框架中,DataGridView控件提供了许多方便的功能和选项,使得数据展示更加方便。

本文将详细介绍SunnyUI框架中的DataGridView控件的用法。

一、DataGridView控件简介DataGridView控件提供了一种方便的方式来显示和编辑数据,它允许用户通过简单的鼠标操作进行选择和编辑数据。

DataGridView控件还提供了许多功能,如行高、列宽的自动调整、分页、排序、筛选等。

这些功能使得DataGridView控件在各种应用程序中都非常有用。

二、DataGridView控件属性设置在使用DataGridView控件之前,我们需要设置一些属性来控制其外观和行为。

以下是一些常用的属性及其说明:1. AutoGenerateColumns:决定是否自动生成列头和列索引。

默认为True,即自动生成列头和列索引。

2. AllowUserToAddRows:是否允许用户添加行。

默认为True。

3. AllowUserToDeleteRows:是否允许用户删除行。

默认为True。

4. RowHeights:行的高度设置。

可以通过设置此属性来改变行的高度。

5. ColumnCount和Columns:设置列的数量和名称。

可以设置多个列的名称和属性。

三、DataGridView控件数据绑定将DataGridView控件绑定到数据源是使用DataGridView控件的关键步骤之一。

可以使用以下方法将数据绑定到DataGridView控件:1. 使用DataSource属性将数据绑定到DataGridView控件。

可以将DataSet、DataTable或自定义对象集合绑定到DataGridView控件。

datagridview单元格间计算

datagridview单元格间计算

datagridview单元格间计算随着信息化技术的不断发展,数据处理和分析已经成为许多行业和企业必不可少的工作。

在这个过程中,datagridview作为一种常见的数据展示和编辑工具,被广泛应用于各种应用程序中。

在datagridview 中进行单元格间的计算,可以帮助用户快速准确地进行数据分析和处理,提高工作效率。

一、datagridview的基本概念和用途1. datagridview是Windows窗体应用程序中常用的数据展示和编辑控件,它可以展示和编辑数据表格,支持各种数据类型的显示和编辑。

2. datagridview的用途广泛,可以用于各种需要展示和编辑数据的场景,比如企业管理系统、金融软件、科研数据分析等。

3. datagridview提供了丰富的属性和方法,可以灵活地控制数据的展示和编辑,为用户提供便利的数据处理方式。

二、datagridview单元格间的计算方法1. 简单的单元格值计算在datagridview中进行单元格值的计算可以通过获取对应单元格的数值,然后进行加减乘除等基本运算来实现。

可以通过遍历datagridview中的单元格,获取相应的数值,然后进行计算,最后将结果显示在指定的单元格中。

2. 复杂的单元格间的计算在一些复杂的数据处理场景中,可能需要进行单元格间的复杂计算,比如多个单元格的累加、平均值计算等。

这时可以借助datagridview 提供的事件,比如CellEndEdit事件,来实时获取单元格的数值变化,并进行相应的计算。

3. 使用自定义函数进行单元格间计算为了提高代码的重用性和可维护性,可以将单元格间的计算逻辑封装为自定义函数,然后在相应的事件中调用这些函数来实现单元格间的计算。

这样可以让代码更加清晰简洁,并且方便日后的维护和扩展。

三、datagridview单元格间计算的注意事项1. 数据类型的处理在进行datagridview单元格间的计算时,需要注意数据类型的处理,确保计算的准确性和可靠性。

通过datagridview数据简单计算与比较

通过datagridview数据简单计算与比较

通过datagridview数据简单计算与比较要通过DataGridView进行数据的简单计算和比较,你可以使用以下步骤:1. 从DataGridView中提取所需的数据。

可以通过遍历DataGridView的行和列来获取每个单元格的数据,并将其存储在适当的变量中。

2. 进行所需的计算。

使用提取的数据进行所需的计算,例如求和、平均值、最大值、最小值等。

根据你的需求,可以使用循环、条件语句等进行计算。

3. 进行数据的比较。

可以使用提取的数据进行比较,例如比较两个数的大小、判断某个条件是否成立等。

使用适当的条件语句和比较运算符进行比较。

4. 将计算结果或比较结果显示在界面上。

可以将计算结果或比较结果显示在DataGridView中的某个单元格中,或者将其显示在其他控件中,例如文本框、标签等。

下面是一个示例代码,演示如何计算DataGridView中某列的总和,并将总和显示在文本框中:```csharp// 获取DataGridView中某列的数据并计算总和double sum = 0;foreach (DataGridViewRow row in dataGridView1.Rows){if (!row.IsNewRow){double value =Convert.ToDouble(row.Cells["ColumnName"].Value);sum += value;}}// 将总和显示在文本框中textBox1.Text = sum.ToString();```你可以根据自己的需要修改和扩展上述代码,实现你想要的计算和比较功能。

WinFormDataGridView的行统计实现

WinFormDataGridView的行统计实现

WinFormDataGridView的行统计实现做WinForm开发离不开一些基本的控件,作为数据列表显示控件中,其中最为重要的要数DataGridView,以前用的是一些第三方控件,提供了比较灵活和方便的功能,比如:根据某列分组统计等等,确实方便,但加载第三方控件的缺点就是加载数据太慢,打包布署后体积大,更为甚者还要收费,咱又不能用盗版,没办法自力更生才是生存之道。

DataGridView的行统计汇总功能在网络上搜索后,有一些同仁实现过(Summary DataGridView),但只是在某种特定的需求下实现了目标,要么是扩展不方便,要么是性能太差,加载一个DataGridView 不知重复运行几十次代码(未做详细统计),为了一劳永逸的解决这个问题,特改写了代码,在此提供给各位同仁,欢迎斧正。

1、首先,看使用方法:dgvProjectList.ShowSummary(new string[] { "TotalIncome", "TotalFee", "TotalCost", "SaleAmount", "RetainedProfits" });如果不使用统计汇总,不会对现有DateGridView控件产生任何负作用,也不占用内存;"TotalIncome", "TotalFee", "TotalCost", "SaleAmount", "RetainedProfit s"为要统计的各行。

效果如下:代码如下:1、DataGridView扩展方法定义代码#region显示统计列///<summary>///显示DataGridView的统计信息///</summary>///<param name="dgv"></param>///<param name="SummaryColumns">要统计的列名称或数据源绑定列名称</param> public static void ShowSummary(this DataGridView dgv,string[] SummaryColumns) {SummaryControlContainer summaryControl = new SummaryControlContainer(dgv ,SummaryColumns);dgv.Controls.Add(summaryControl);//dgv.Tag = summaryControl;summaryControl.BringToFront();summaryControl.Show();}///<summary>///显示DataGridView的统计信息///</summary>///<param name="dgv"></param>///<param name="DisplaySumRowHeader">是否显示合计行标题</param>///<param name="SumRowHeaderText">合计列标题</param>///<param name="SumRowHeaderTextBold">合计列标题用粗体显示</param>///<param name="SummaryColumns">要统计的列名称或数据源绑定列名称</param> public static void ShowSummary(this DataGridView dgv, bool DisplaySumRowHeader, string SumRowHeaderText, bool SumRowHeaderTextBold, string[] SummaryColumns){SummaryControlContainer summaryControl = new SummaryControlContainer(dgv , DisplaySumRowHeader, SumRowHeaderText, SumRowHeaderTextBold, SummaryColumn s);dgv.Controls.Add(summaryControl);//dgv.Tag = summaryControl;summaryControl.BringToFront();summaryControl.Show();}#endregion2、核心类定义代码internal class SummaryControlContainer : UserControl{#region公有属性private bool _DisplaySumRowHeader;///<summary>///是否显示合计行标题///</summary>public bool DisplaySumRowHeader{get { return _DisplaySumRowHeader; }set { _DisplaySumRowHeader = value; } }private string _SumRowHeaderText = "合计";///<summary>///合计列标题///</summary>public string SumRowHeaderText{get{if (_DisplaySumRowHeader){return _SumRowHeaderText;}else{return string.Empty;}}set{if (string.IsNullOrEmpty(value)){_SumRowHeaderText = "合计";}else{_SumRowHeaderText = value;}}}private bool _SumRowHeaderTextBold;///<summary>///合计列标题用粗体显示///</summary>public bool SumRowHeaderTextBoldget { return _SumRowHeaderTextBold; }set { _SumRowHeaderTextBold = value; }}private string[] _SummaryColumns;///<summary>///要统计的列名称或数据源绑定列名称///</summary>public string[] SummaryColumns{get { return _SummaryColumns; }set{_SummaryColumns = value;}}private string _FormatString = "F02";public string FormatString{get { return _FormatString; }set { _FormatString = value; }}#endregion#region私有变量private Hashtable sumBoxHash;private DataGridView dgv;private Label sumRowHeaderLabel;#endregion#region构造函数public SummaryControlContainer(DataGridView dgv, string[] summaryColumns): this(dgv, true, "合计", false, summaryColumns){}public SummaryControlContainer(DataGridView dgv, bool displaySumRowHeader, stri ng sumRowHeaderText,bool sumRowHeaderTextBold, string[] summaryColumns){if (dgv == null){throw new Exception("DataGridView 不能为空!");this.dgv = dgv;_DisplaySumRowHeader = displaySumRowHeader;_SumRowHeaderText = sumRowHeaderText;_SumRowHeaderTextBold = sumRowHeaderTextBold;_SummaryColumns = summaryColumns;this.Visible = true;this.Height = dgv.RowTemplate.Height;this.Top = dgv.Height - this.Height;this.Left = dgv.Left;this.BackColor = dgv.RowHeadersDefaultCellStyle.BackColor;sumBoxHash = new Hashtable();sumRowHeaderLabel = new Label();sumRowHeaderLabel.Height = this.Height;sumRowHeaderLabel.Width = dgv.RowHeadersWidth;sumRowHeaderLabel.BackColor = dgv.RowHeadersDefaultCellStyle.BackColor;this.dgv.Resize += new EventHandler(dgv_Resize);this.dgv.Scroll += new ScrollEventHandler(dgv_Scroll);this.dgv.ColumnWidthChanged += new DataGridViewColumnEventHandler(dgv_Co lumnWidthChanged);this.dgv.RowHeadersWidthChanged += new EventHandler(dgv_RowHeadersWidth Changed);this.dgv.RowsAdded += new DataGridViewRowsAddedEventHandler(dgv_RowsAdd ed);this.dgv.RowsRemoved += new DataGridViewRowsRemovedEventHandler(dgv_Ro wsRemoved);this.dgv.CellValueChanged += new DataGridViewCellEventHandler(dgv_CellValueC hanged);this.dgv.DataSourceChanged += new EventHandler(dgv_DataSourceChanged);this.dgv.ColumnAdded += new DataGridViewColumnEventHandler(dgv_ColumnAd ded);this.dgv.ColumnRemoved += new DataGridViewColumnEventHandler(dgv_Column Removed);this.dgv.ColumnStateChanged += new DataGridViewColumnStateChangedEventH andler(dgv_ColumnStateChanged);this.dgv.ColumnDisplayIndexChanged += new DataGridViewColumnEventHandler( dgv_ColumnDisplayIndexChanged);reCreateSumBoxes();}#endregion#region私有方法///<summary>/// Checks if passed object is of type of integer///</summary>///<param name="o">object</param>///<returns>true/ false</returns>protected bool IsInteger(object o){if (o is Int64){return true;}if (o is Int32){return true;}if (o is Int16){return true;}return false;}///<summary>/// Checks if passed object is of type of decimal/ double ///</summary>///<param name="o">object</param>///<returns>true/ false</returns>protected bool IsDecimal(object o){if (o is Decimal){return true;}if (o is Single){return true;}if (o is Double){return true;}return false;}///<summary>/// Calculate the Sums of the summary columns///</summary>private void calcSummaries(){foreach (ReadOnlyTextBox roTextBox in sumBoxHash.Values){if (roTextBox.IsSummary){roTextBox.Tag = 0;roTextBox.Text = "0";roTextBox.Invalidate();}}if (SummaryColumns != null && SummaryColumns.Length > 0 && sumBoxHash.C ount > 0){foreach (DataGridViewRow dgvRow in dgv.Rows){foreach (DataGridViewCell dgvCell in dgvRow.Cells){foreach (DataGridViewColumn dgvColumn in sumBoxHash.Keys){if (dgvCell.OwningColumn.Equals(dgvColumn)){ReadOnlyTextBox sumBox = (ReadOnlyTextBox)sumBoxHash[dgvCo lumn];if (sumBox != null && sumBox.IsSummary){if (dgvCell.Value != null && !(dgvCell.Value is DBNull)){if (IsInteger(dgvCell.Value)){sumBox.Tag = Convert.ToInt64(sumBox.Tag) + Convert.ToI nt64(dgvCell.Value);}else if (IsDecimal(dgvCell.Value)){sumBox.Tag = Convert.ToDecimal(sumBox.Tag) + Convert. ToDecimal(dgvCell.Value);}sumBox.Text = string.Format("{0}", sumBox.Tag);sumBox.Invalidate();}}}}}}}}///<summary>/// Create summary boxes for each Column of the DataGridView///</summary>private void reCreateSumBoxes(){foreach (Control control in sumBoxHash.Values){this.Controls.Remove(control);}sumBoxHash.Clear();int iCnt = 0;ReadOnlyTextBox sumBox;List<DataGridViewColumn> sortedColumns = SortedColumns;foreach (DataGridViewColumn dgvColumn in sortedColumns){sumBox = new ReadOnlyTextBox();sumBoxHash.Add(dgvColumn, sumBox);sumBox.Top = 0;sumBox.Height = dgv.RowTemplate.Height;sumBox.BorderColor = dgv.GridColor;sumBox.BackColor = dgv.DefaultCellStyle.BackColor;sumBox.ForeColor = dgv.DefaultCellStyle.ForeColor;sumBox.BringToFront();if (dgv.ColumnCount - iCnt == 1){sumBox.IsLastColumn = true;}if (SummaryColumns != null && SummaryColumns.Length > 0){for (int iCntX = 0; iCntX < SummaryColumns.Length; iCntX++){if (SummaryColumns[iCntX] == dgvColumn.DataPropertyName ||SummaryColumns[iCntX] == ){sumBox.TextAlign = TextHelper.TranslateGridColumnAligment(dgvColu mn.DefaultCellStyle.Alignment);sumBox.IsSummary = true;sumBox.FormatString = dgvColumn.DefaultCellStyle.Format;if (dgvColumn.ValueType == typeof(System.Int32) || dgvColumn.Valu eType == typeof(System.Int16) ||dgvColumn.ValueType == typeof(System.Int64) || dgvColumn.Valu eType == typeof(System.Single) ||dgvColumn.ValueType == typeof(System.Double) || dgvColumn.Val ueType == typeof(System.Single) ||dgvColumn.ValueType == typeof(System.Decimal)){sumBox.Tag = System.Activator.CreateInstance(dgvColumn.ValueTy pe);}}}}sumBox.BringToFront();this.Controls.Add(sumBox);iCnt++;}sumRowHeaderLabel.Font = new Font(dgv.DefaultCellStyle.Font, SumRowHeaderT extBold ? FontStyle.Bold : FontStyle.Regular);sumRowHeaderLabel.Anchor = AnchorStyles.Left;sumRowHeaderLabel.TextAlign = ContentAlignment.MiddleRight;sumRowHeaderLabel.Height = this.Height;sumRowHeaderLabel.Width = dgv.RowHeadersWidth;sumRowHeaderLabel.Top = 0;sumRowHeaderLabel.Text = DisplaySumRowHeader ? SumRowHeaderText : string .Empty;sumRowHeaderLabel.ForeColor = dgv.DefaultCellStyle.ForeColor;sumRowHeaderLabel.Margin = new Padding(0);sumRowHeaderLabel.Padding = new Padding(0);this.Controls.Add(sumRowHeaderLabel);calcSummaries();resizeSumBoxes();}///<summary>/// Order the columns in the way they are displayed///</summary>private List<DataGridViewColumn> SortedColumns{get{List<DataGridViewColumn> result = new List<DataGridViewColumn>();DataGridViewColumn column = dgv.Columns.GetFirstColumn(DataGridViewEle mentStates.None);if (column == null){return result;}result.Add(column);while ((column = dgv.Columns.GetNextColumn(column, DataGridViewElementS tates.None, DataGridViewElementStates.None)) != null){result.Add(column);}return result;}}///<summary>/// Resize the summary Boxes depending on the/// width of the Columns of the DataGridView///</summary>private void resizeSumBoxes(){try{this.SuspendLayout();if (sumBoxHash != null && sumBoxHash.Count > 0)try{int rowHeaderWidth = dgv.RowHeadersVisible ? dgv.RowHeadersWidth - 1 : 0;int sumLabelWidth = dgv.RowHeadersVisible ? dgv.RowHeadersWidth - 1 : 0;int curPos = rowHeaderWidth;if (DisplaySumRowHeader && sumLabelWidth > 0){sumRowHeaderLabel.Visible = true;sumRowHeaderLabel.Width = sumLabelWidth;if (dgv.RightToLeft == RightToLeft.Yes){if (sumRowHeaderLabel.Dock != DockStyle.Right){sumRowHeaderLabel.Dock = DockStyle.Right;}}else{if (sumRowHeaderLabel.Dock != DockStyle.Left){sumRowHeaderLabel.Dock = DockStyle.Left;}}}else{if (sumRowHeaderLabel.Visible){sumRowHeaderLabel.Visible = false;}}int iCnt = 0;Rectangle oldBounds;foreach (DataGridViewColumn dgvColumn in SortedColumns){ReadOnlyTextBox sumBox = (ReadOnlyTextBox)sumBoxHash[dgvColumn];if (sumBox != null){oldBounds = sumBox.Bounds;if (!dgvColumn.Visible){sumBox.Visible = false;continue;}int from = dgvColumn.Frozen ? curPos : curPos - dgv.HorizontalScro llingOffset;int width = dgvColumn.Width + (iCnt == 0 ? 0 : 0);if (from < rowHeaderWidth){width -= rowHeaderWidth - from;from = rowHeaderWidth;}if (from + width > this.Width){width = this.Width - from;}if (width < 4){if (sumBox.Visible){sumBox.Visible = false;}}else{if (this.RightToLeft == RightToLeft.Yes){from = this.Width - from - width;}if (sumBox.Left != from || sumBox.Width != width){sumBox.SetBounds(from, 0, width, 0, BoundsSpecified.X | Bou ndsSpecified.Width);}if (!sumBox.Visible){sumBox.Visible = true;}}curPos += dgvColumn.Width + (iCnt == 0 ? 0 : 0);if (oldBounds != sumBox.Bounds){sumBox.Invalidate();}}iCnt++;}}finally{this.ResumeLayout();}}#if (DEBUG)catch (Exception ee){MessageBox.Show(ee.ToString());System.Diagnostics.Debug.WriteLine(ee.ToString());}#elsecatch{ }#endif}#endregion#region事件处理程序void dgv_DataSourceChanged(object sender, EventArgs e){calcSummaries();}private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e){ReadOnlyTextBox roTextBox = (ReadOnlyTextBox)sumBoxHash[dgv.Columns[e.Co lumnIndex]];if (roTextBox != null){if (roTextBox.IsSummary){calcSummaries();}}}private void dgv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) {calcSummaries();}private void dgv_RowsRemoved(object sender, DataGridViewRowsRemovedEventArg s e){calcSummaries();}private void dgv_ColumnDisplayIndexChanged(object sender, DataGridViewColumnE ventArgs e){//resizeSumBoxes();reCreateSumBoxes();}private void dgv_ColumnStateChanged(object sender, DataGridViewColumnStateCha ngedEventArgs e){resizeSumBoxes();}private void dgv_Scroll(object sender, ScrollEventArgs e){resizeSumBoxes();}private void dgv_ColumnWidthChanged(object sender, DataGridViewColumnEventArg s e){resizeSumBoxes();}private void dgv_RowHeadersWidthChanged(object sender, EventArgs e){int columnsWidth = 0;for (int iCnt = 0; iCnt < dgv.Columns.Count; iCnt++){if (dgv.Columns[iCnt].Visible){if (dgv.Columns[iCnt].AutoSizeMode == DataGridViewAutoSizeColumnMode. Fill){columnsWidth += dgv.Columns[iCnt].MinimumWidth;}elsecolumnsWidth += dgv.Columns[iCnt].Width;}}this.Width = columnsWidth;resizeSumBoxes();}protected override void OnResize(EventArgs e){base.OnResize(e);resizeSumBoxes();}private void dgv_Resize(object sender, EventArgs e){adjustSumControlToGrid();resizeSumBoxes();}private void adjustSumControlToGrid(){ScrollBar horizontalScrollBar = (ScrollBar)typeof(DataGridView).GetProperty("Hori zontalScrollBar", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).Get Value(dgv, null);ScrollBar verticalScrollBar = (ScrollBar)typeof(DataGridView).GetProperty("Vertica lScrollBar", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance).GetValue (dgv, null);if (horizontalScrollBar.Visible){this.Top = dgv.Height - this.Height - horizontalScrollBar.Height;}elsethis.Top = dgv.Height - this.Height;}this.Left = dgv.Left;if (verticalScrollBar.Visible){this.Width = dgv.Width - verticalScrollBar.Width;}else{this.Width = dgv.Width;}}private void dgv_ColumnRemoved(object sender, DataGridViewColumnEventArgs e) {reCreateSumBoxes();}private void dgv_ColumnAdded(object sender, DataGridViewColumnEventArgs e){reCreateSumBoxes();}#endregion}internal partial class ReadOnlyTextBox : Control{StringFormat format;public ReadOnlyTextBox(){InitializeComponent();format = new StringFormat( StringFormatFlags.NoWrap | StringFormatFlags.FitBl ackBox | StringFormatFlags.MeasureTrailingSpaces);format.LineAlignment = StringAlignment.Center;this.Height = 10;this.Width = 10;this.Padding = new Padding(2);}public ReadOnlyTextBox(IContainer container)container.Add(this);InitializeComponent();this.TextChanged += new EventHandler(ReadOnlyTextBox_TextChanged); }private void ReadOnlyTextBox_TextChanged(object sender, EventArgs e){if (!string.IsNullOrEmpty(formatString) && !string.IsNullOrEmpty(Text)){Text = string.Format(formatString, Text);}}private Color borderColor = Color.Black;private bool isSummary;public bool IsSummary{get { return isSummary; }set { isSummary = value; }}private bool isLastColumn;public bool IsLastColumn{get { return isLastColumn; }set { isLastColumn = value; }}private string formatString;public string FormatString{get { return formatString; }set { formatString = value; }}private HorizontalAlignment textAlign = HorizontalAlignment.Left;[DefaultValue(HorizontalAlignment.Left)]public HorizontalAlignment TextAlign{get { return textAlign; }{textAlign = value;setFormatFlags();}}private StringTrimming trimming = StringTrimming.None;[DefaultValue(StringTrimming.None)]public StringTrimming Trimming{get { return trimming; }set{trimming = value;setFormatFlags();}}private void setFormatFlags(){format.Alignment = TextHelper.TranslateAligment(TextAlign);format.Trimming = trimming;}public Color BorderColor{get { return borderColor; }set { borderColor = value; }}protected override void OnPaint(PaintEventArgs e){int subWidth = 0;Rectangle textBounds;if (!string.IsNullOrEmpty(formatString) && !string.IsNullOrEmpty(Text)){Text = String.Format("{0:" + formatString + "}", Convert.ToDecimal(Text)); }textBounds = new Rectangle(this.ClientRectangle.X + 2, this.ClientRectangle.Y + 2, this.ClientRectangle.Width - 2 , this.ClientRectangle.Height - 2 );using(Pen pen = new Pen(borderColor))if (isLastColumn)subWidth = 1;e.Graphics.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle);e.Graphics.DrawRectangle(pen, this.ClientRectangle.X, this.ClientRectangle.Y, t his.ClientRectangle.Width - subWidth , this.ClientRectangle.Height - 1);e.Graphics.DrawString(Text, Font, Brushes.Black, textBounds , format );}}}internal static class TextHelper{public static StringAlignment TranslateAligment(HorizontalAlignment aligment){if (aligment == HorizontalAlignment.Left)return StringAlignment.Near;else if (aligment == HorizontalAlignment.Right)return StringAlignment.Far;elsereturn StringAlignment.Center;}public static HorizontalAlignment TranslateGridColumnAligment(DataGridViewContent Alignment aligment){if (aligment == DataGridViewContentAlignment.BottomLeft || aligment == DataGr idViewContentAlignment.MiddleLeft || aligment == DataGridViewContentAlignment.TopLeft) return HorizontalAlignment.Left;else if (aligment == DataGridViewContentAlignment.BottomRight || aligment == DataGridViewContentAlignment.MiddleRight || aligment == DataGridViewContentAlignmen t.TopRight )return HorizontalAlignment.Right;elsereturn HorizontalAlignment.Center;}public static TextFormatFlags TranslateAligmentToFlag(HorizontalAlignment aligment) {if (aligment == HorizontalAlignment.Left)return TextFormatFlags.Left;else if (aligment == HorizontalAlignment.Right)return TextFormatFlags.Right;elsereturn TextFormatFlags.HorizontalCenter;}public static TextFormatFlags TranslateTrimmingToFlag(StringTrimming trimming) {if (trimming == StringTrimming.EllipsisCharacter)return TextFormatFlags.EndEllipsis;else if (trimming == StringTrimming.EllipsisPath)return TextFormatFlags.PathEllipsis;if (trimming == StringTrimming.EllipsisWord)return TextFormatFlags.WordEllipsis;if (trimming == StringTrimming.Word)return TextFormatFlags.WordBreak;elsereturn TextFormatFlags.Default;}}。

GridView添加统计(合计)行

GridView添加统计(合计)行
{
e.Row.Cells[0].Text = "合计";
e.Row.Cells[1].Text = mysum1.ToString();
e.Row.Cells[2].Text = mysum2.ToStringql查询统计出合计值在绑定gridview时让其结果赋于一个datatable全局变量然后在rowdatabound事件中
GridView添加统计(合计)行
前提:设置属性ShowFooter="True"
方法一:使用SQL查询统计出合计值,在绑定GridView时让其结果赋于一个DataTable(全局变量),然后在RowDataBound事件中
mysum1 +=Convert .ToInt32 (myrows[2].ToString ());
mysum2 += Convert.ToInt32(myrows[3].ToString());
}
// 合计
if(e.Row.RowType == DataControlRowType.Footer)
e.Row.Cells[11].Text = dtSum.Rows[0][8].ToString();
}
其中dtSum是那个全局DataTable,在绑定GridView同时将SQL查询的结果赋给它;效果如下:
方法二、直接把对应列每一行的值相加(不做数据查询,在RowDataBound事件中运算)
intmysum1 = 0;
e.Row.Cells[5].Text = dtSum.Rows[0][2].ToString();
e.Row.Cells[6].Text = dtSum.Rows[0][3].ToString();

DataGridView控件汇总行

DataGridView控件汇总行

DataGridView控件创建汇总行实例
在使用DataGridView的过程中发现没有合计,总是觉得很不习惯。

用单独的TxtBox做合计又显得整个界面结构有点散。

所有根据自己的摸索自己写了一个DataGridView合计的类文件。

一、先看效果
说明:在一行输入完成后,自动在汇总行上边增加一行空白行。

当输入完成需要汇总的单元后自动更新汇总行的数据。

二、实现步骤:
1、先建立空白WinForm文档,然后创建一个DataGridView控件。

点控件右上边的三角形,在弹出的对话框中点击Add Columns 创建列。

如下图:
上图输入完成后要继续创建列点Add按钮,所有列创建完成后点Cancel按钮完成列的创建。

2、创建一个类文件,取名myDatagridview,类文件中的代码如下:
2、选中DataGridView控件,按F7查看代码。

在弹出的窗体代码的窗口中输入以下代码:。

winformdatagridview增加合计行

winformdatagridview增加合计行
DataRow dr=dt.NewRow();
dr[0]="合计";
dr[4]=a;
dt.Rows.Add(dr);
5、设置dataGridView的数据源。
dataGridView1.DataSource=dt;
这样就可以在dataGridView中最好一行增加合计行。
注:此文转载,非原创。
4在dt中增加一行第一列显示合计第五列需要求和的列赋值为a
winformdatagridview增加合计行
本文只是简单的实现了datagridview汇总功能。
1、定义一个累加变量,累计需要汇总的列: decimal a=0.00m;
2、将要显示在datagridview中的数据放到DataTable dt对象中去。chxclass.selectdj1()是类中的一个方法,返回dataset对象。
System.Data.DataTable dt=chxclass.selectdj1().Tables[0];
3、在循环中,累加第五列的值。
for(int i=0;i<dt.Rows.Count;i+oDecimal(dt.Rows[i][4]);
}
4、在dt中增加一行,第一列显示合计,第五列需要求和的列赋值为a。

DataGridView数据统计操作

DataGridView数据统计操作
datagridview数据统计操作
DataGridView 合计行
C# DataGridView统计操作
讲师:小浩
培训内容
• 了解DataGridView数据绑定机制。
数据绑定控件的DataSource属性,获取或设置对象,数据绑定控ew统计。
DataGridView 控件提供一种强大而灵活的以表格形式显示数据的方式。 可以使用DataGridView 控件来显示少量数据的只读视图,也可以对其进行 缩放以显示特大数据集的可编辑视图。
事例
要了解的知识
1、Dataset简介
DataSet 对象是支持 的断开 式、分布式数据方案的核心对象。DataSet 是数据的内存驻留表示形式,无论数据源 是什么,它都会提供一致的关系编程模型 。它可以用于多种不同的数据源,用于 XML数据,或用于管理应用程序本地的数 据。DataSet 表示包括相关表、约束和表 间关系在内的整个数据集
2、DataTable的使用
1、DataTable使用到的方法 NewRow() 创建与该表具有相同架构的新 DataRow。 命名空间:System.Data Compute() 计算用来传递筛选条件的当前行上的给定表达式。 命名空间:System.Data
Compute方法详细介绍
Compute函数的参数就两个:Expression,和Filter 第一个参数Expresstion 1:聚合函数”Sum()” 2:自由计算表达式“20*30+1” 3:bool表达式“1=2” 4:IFF逻辑表达式” IIF(20>1000, 0, 1)” 还支持IsNull,Trim ,SubString等,具体的可以看MSDN 第二个参数Filter 就是一个简单的查询条件。比如,”true”, “Id>4”, “Name like ’%nd’ and sex=’male’”.

在DataGridView底部实现统计行

在DataGridView底部实现统计行

在DataGridView底部实现统计⾏代码:在开发⼀个基于Window Form的CS应⽤程序的时候,我搜索过⼀个这样的DataGridView 控件,它能显⽰⼀列内容的总和。

例如:统计顾客订单的总数,显⽰在Grid中的⼀列上。

就像Excel能做的⼀样,我没有找到⼀个合适的解决⽅案,所以我决定⾃⼰开发⼀个组件。

它能像DataGridView⼀样⼯作,能在表格的底部显⽰⼀⾏。

为了SummaryRow的重新定位和⼤⼩的调整,我重构了⼀些代码,代码借⽤了Robert Rhode写的Nice Filterable DataGrid。

为了能运⾏SummaryDataGridViewTest-Application ,必要将Nwind.mdb数据库拷贝到输出路径下⾯。

⾮常好的DataGridView和Window-Forms类库的知识有助于你定制代码,但是它不是必要的。

因为使⽤SummaryDataGridView ⾮常的简单。

SummaryDataGridView 能像任何其他Windows-Forms 控件⼀样使⽤。

⽀持设计时的设定。

在设计上,它有⼀组公共属性。

使⽤类似DataGridView ,因为它是继承了DataGridView。

为了显⽰数据,需要设置控件的DataSource 属性。

每⼀列必须添加到字符串数组SummaryColumns中。

看图1和图2的公有属性,看他们是如何影响SummaryDataGridView的。

SummaryRow使⽤DataGridView 的⼀⾏作为总结⾏是⼀件⾮常棘⼿的事情,会带来很多问题。

我没有找到在表格的底部固定SummaryRow的解决⽅案,它⼜必须是滚动的。

由于这个原因,我使⽤⼀个带Textboxe的简单控件,它显⽰在DataGridView的下⾯。

所有的textbox和DataGridView⼀起改变⾃⼰的⼤⼩。

此外它必须利⽤⾃⼰的⽔平滚动条将显⽰在我们的SummaryControlContainer下⾯,⽽不是使⽤显⽰在SummaryRow上⾯的DataGridView的⽔平滚动条。

WinForms第七章DataGridView—显示和操作数据教案

WinForms第七章DataGridView—显示和操作数据教案

第七章DataGridView—显示和操作数据1.回顾在DataSet 对象内表示的数据是数据库的部分或全部的断开式副本。

DataTable 表示一个数据表,而DataColumn 表示DataTable 中列的结构。

通过定义DataRow对象向DataTable对象添加数据行。

DataAdapter 对象用来填充数据集和用更新集到数据库,这样方便了数据库和数据集之间的交互。

2.本章内容DataGridView显示数据DataGridView常用属性和方法掌握DataGridView列的设置掌握DataGridView数据绑定掌握DataGridView中操作数据掌握CommandBuilder对象的使用3.本章重点DataGridView常用属性和方法掌握DataGridView列的设置掌握DataGridView数据绑定掌握DataGridView中操作数据4.本章讲课思路DataGridView控件datasoure属性的特点Datasoure数据源必须是:数组、datatable、dataview、dataset、集合对象、派生或实现IList或ILISTSOURE接口的组件Dataview绑定表格到datagridview中Datagridiew增、删、改。

Datagridview 自定义界面5.知识点讲解01.知识点一:DataGridView控件datasoure属性a)讲解思路:1.Datagridview 控件以表的形式显示数据,那么表的结构他可以是一个2维数组。

只有是数组或者集合形式的数据结构都可以绑定和显示到datagridview 中。

1)Datagridview显示数据的方式非常灵活。

它的datasource数据可以设置datagridview的数据源2)Datasource支持以下几中数据源:数组、datatable、dataview、dataset、集合对象、和实现了Ilist集合对象3)Dataview是datatable中存储数据的表示层。

dataGridView底部统计行如何实现

dataGridView底部统计行如何实现

相关代码:复制内容到剪贴板建》程序代码using System;using System.Collectio ns.Ge neric; using System.Data;using System.Data.SqlClie nt;using System.Drawi ng;using System.Wi ndows.Forms;n amespace Win dowsFormsApplicatio n1 { public partial class Form1 : Form public Form1(){ InitializeComponent();}private void Form1_Load(object sender, EventArgs e){ dataGridView1.DataBindingComplete += delegate{ AddLable(dataGridView1); SetSUM(dataGridView1, "PriceSUM");};dataGridView1.ColumnWidthChanged += delegate{ AddLable(dataGridView1); SetSUM(dataGridView1, "PriceSUM");};using (SqlConnection conn = newSqlConnection("server=(local);database=Test;user id=sa;password=sa;")) { using (SqlDataAdapter adapter = new SqlDataAdapter("Select top 10 * FROM Products", conn)){ DataTable table = new DataTable(); adapter.Fill(table);dataGridView1.DataSource = table;}}}/// <summary>/// 添加统计行/// </summary>/// <param name="dataGridView"></param>public void AddLable(DataGridView dataGridView){Label lblParent, lblChild; DataGridViewColumn column; int height =dataGridView.Height;int width = dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None);int scrollbarheight =dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None) > dataGridView.Width ? 16 : 0;// 水平滚动条高int rowheaderswidth = dataGridView.RowHeadersVisible ?dataGridView.RowHeadersWidth : 0;// 行标题宽度int length = rowheaderswidth;//if (dataGridView.Controls[ + " __ "] !=null)dataGridView.Controls.Remove(dataGridView.Controls[da + " ______________________ "]);lblParent = new Label(); = + " ";lblParent.BackColor = Color.Yellow;lblParent.Left = 1;lblParent.Top = height - scrollbarheight - 23 - 1; lblParent.Height = 23;lblParent.Width = width + rowheaderswidth - 1;dataGridView.Controls.Add(lblParent);for (int i = 0; i < dataGridView.Columns.Count; i++){column = dataGridView.Columns[i];if (column.Visible){ lblChild = new Label(); = + " ";lblChild.BackColor = Color.Transparent; //lblChild.Text =; lblChild.AutoSize = true;lblChild.Left = length + ((int)column.Width / 2) -10 + 1;length += column.Width; lblChild.Top = 3;lblParent.Controls.Add(lblChild);}/// <summary>/// 获取列总和/// </summary>/// <param name="dataGridView"></param>/// <param name="columnName"></param>public void SetSUM(DataGridView dataGridView, string columnName) {if (dataGridView.Controls[ + " ___ "] !=null){decimal sum = 0;for (int i = 0; i < dataGridView.Rows.Count; i++){try{ if(dataGridView.Rows[i].Cells[columnName].Value != null){ sum +=decimal.Parse(dataGridView.Rows[i].Cells[columnName].Value.ToString() );}} catch { }}dataGridView.Controls[ +" ___ "].Controls[columnName + " ____ "].Text = sum.ToString();}}}}。

Gridview中实现求和统计功能

Gridview中实现求和统计功能

Gridview中实现求和统计功能GridView加⼊⾃动求和求平均值⼩计效果图:解决⽅案:private double sum = 0; //取指定列的数据和,你要根据具体情况对待可能你要处理的是intprotected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){if (e.Row.RowIndex >= 0){sum += Convert.ToDouble(e.Row.Cells[6].Text);}else if (e.Row.RowType == DataControlRowType.Footer){e.Row.Cells[5].Text = "总薪⽔为:";e.Row.Cells[6].Text = sum.ToString();e.Row.Cells[3].Text = "平均薪⽔为:";e.Row.Cells[4].Text = ((int)(sum / GridView1.Rows.Count)).ToString();}}后台全部代码:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;using System.Drawing;public partial class Default7 : System.Web.UI.Page{SqlConnection sqlcon;SqlCommand sqlcom;string strCon = "Data Source=(local);Database=北风贸易;Uid=sa;Pwd=sa";protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){bind();}}protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e){GridView1.EditIndex = e.NewEditIndex;bind();}protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e){sqlcon = new SqlConnection(strCon);string sqlstr = "update 飞狐⼯作室 set 姓名='"+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',家庭住址='"+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where ⾝份证号码='"+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();sqlcom.ExecuteNonQuery();sqlcon.Close();GridView1.EditIndex = -1;bind();}protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e){GridView1.EditIndex = -1;bind();}public void bind(){string sqlstr = "select top 5 * from 编程中国社区";sqlcon = new SqlConnection(strCon);SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);DataSet myds = new DataSet();sqlcon.Open();myda.Fill(myds, "编程中国社区");GridView1.DataSource = myds;GridView1.DataKeyNames = new string[] { "⾝份证号码" };GridView1.DataBind();sqlcon.Close();}private double sum = 0; //取指定列的数据和protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){if (e.Row.RowIndex >= 0){sum += Convert.ToDouble(e.Row.Cells[6].Text);}else if (e.Row.RowType == DataControlRowType.Footer){e.Row.Cells[5].Text = "总薪⽔为:";e.Row.Cells[6].Text = sum.ToString();e.Row.Cells[3].Text = "平均薪⽔为:";e.Row.Cells[4].Text = ((int)(sum / GridView1.Rows.Count)).ToString();}}}前台:唯⼀的花头就是设置ShowFooter="True" ,否则默认表头为隐藏的!<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="3" OnRowEditing="GridView1_RowEditing"OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" Font-Size="12px" OnRowDataBound="Grid <FooterStyle BackColor="White" ForeColor="#000066" /><Columns><asp:CommandField HeaderText="编辑" ShowEditButton="True" /><asp:BoundField DataField="⾝份证号码" HeaderText="编号" ReadOnly="True" /><asp:BoundField DataField="姓名" HeaderText="姓名" /><asp:BoundField DataField="出⽣⽇期" HeaderText="邮政编码" /><asp:BoundField DataField="家庭住址" HeaderText="家庭住址" /><asp:BoundField DataField="邮政编码" HeaderText="邮政编码" /><asp:BoundField DataField="起薪" HeaderText="起薪" /></Columns><RowStyle ForeColor="#000066" /><SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /><PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" CssClass="ms-formlabel DataGridFixedHeader"/><HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /></asp:GridView> 。

c#winform中,对DataGridView数据进行操作,一次性保存

c#winform中,对DataGridView数据进行操作,一次性保存

c#winform中,对DataGridView数据进行操作,一次性保存需求:不能每加一条数据就操作数据库,要完成所有的数据加入界面,点击保存时才一次性保存。

加载数据时,数据源上可以有数据,并可以在界面上对数据进行增加、修改、删除。

所有操作,在点击保存时,准确地将所需要的操作结果反应到数据库中。

解决思路:先在程序中判断哪些数据要增加到数据库,哪些数据要对数据库中数据进行修改,哪些数据要进行删除。

再循环操作数据库。

#region 一次性判断并获取DataGridViewRow数据的操作情况/// <summary>/// 一次性判断并获取DataGridViewRow数据的操作情况/// </summary>/// <param name="dt">初始化DataGridView时绑定的数据源</param>/// <param name="DataGridViewRows">修改后的DataGridView.Rows</param>/// <param name="UniColumn">记录的唯一标识,可以是主键。

能保证唯一的属性就行</param>/// <returns> 返回值为Dictionary《object, int》,value值:1为新增,2为修改,3为删除,4 什么也不做</returns> public static IDictionary<object, int> GetCompareDataGridViewRows(DataTable dt, DataGridViewRowCollection DataGridViewRows, string UniColumn){IDictionary<object, int> dictlist = new Dictionary<object, int>();List<string> listOperated = new List<string>();int OperateType = -1;if (DataGridViewRows.Count > 0){for (int i = 0; i < DataGridViewRows.Count; i++){OperateType=OperateModel(dt, DataGridViewRows[i], UniColumn);if (OperateType == 1 || OperateType == 2)//添加或修改的{dictlist.Add(DataGridViewRows[i], OperateType);}listOperated.Add(DataGridViewRows[i].Cells[UniColumn].Val ue.ToString());}}for (int j = 0; j < dt.Rows.Count; j++){if (!listOperated.Contains(dt.Rows[j][UniColumn].T oString())) {dictlist.Add(dt.Rows[j][UniColumn], 3); //要删除的}}return dictlist;/***************使用方法***********************IDictionary<object, int> dictlist = CommonFunctions.GetCompareDataGridViewRows(list,dataGridView.Rows, "contct_cd");foreach (var dt in dictlist){//定义model类,从DataGridViewRow中读取数据switch (dt.Value){case 1:DataGridViewRow row = (DataGridViewRow)dt.Key;//增加到数据库代码break;case 2:DataGridViewRow row = (DataGridViewRow )dt.Key;//修改到数据库的代码break;case 3:string primarykey=(string)dt.Key;//从数据库删除的代码break;}}***********************************************/}#endregion#region 判断需要操作的类型 OperateModel/// <summary>/// 判断需要操作的类型 1为新增,2为修改,4 什么也不做/// </summary>/// <param name="modelcmp"></param>/// <returns></returns>private static int OperateModel(DataTable dt, DataGridViewRow row, string UniColumn){if (dt.Rows.Count == 0) return 1;bool isExist = false; //是否存在bool isModified = false; //是否修改过for (int i = 0; i < dt.Rows.Count; i++) //遍历list数据,一个一个判断{DataRow CurrentRow = dt.Rows[i]; //当前行if (CurrentRow[UniColumn].ToString() == row.Cells[UniColumn].Value.ToString()) //如果唯一标识相同{for (int j = 0; j < dt.Columns.Count; j++){string columnName = dt.Columns[j].ColumnName;if (CurrentRow[columnName].ToString() != row.Cells[columnName].Value.T oString()){isModified = true; break;}}isExist = true;break;}}if (isExist && isModified){return 2;}else if (!isExist){return 1;}else return 4;}#endregion提示:使用对比的不能是数据源,只有另外定义一个DataTable dtCopy=dt.Copy(); 不去操作dtCopy,对dt操作才不能影响到副本dtCopy,直接等于是不可以的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

事例
要了解的知识
1、Dataset简介
DataSet 对象是支持 的断开 式、分布式数据方案的核心对象。DataSet 是数据的内存驻留表示形式,无论数据源 是什么,它都会提供一致的关系编程模型 。它可以用于多种不同的数据源,用于 XML数据,或用于管理应用程序本地的数 据。DataSet 表示包括相关表、约束和表 间关系在内的整个据集
DataGridView 合计行
C# DataGridView统计操作
讲师:小浩
培训内容
• 了解DataGridView数据绑定机制。
数据绑定控件的DataSource属性,获取或设置对象,数据绑定控件从该 对象中检索其数据项列表。
• 理解DataGridView统计。
DataGridView 控件提供一种强大而灵活的以表格形式显示数据的方式。 可以使用DataGridView 控件来显示少量数据的只读视图,也可以对其进行 缩放以显示特大数据集的可编辑视图。
2、DataTable的使用
1、DataTable使用到的方法 NewRow() 创建与该表具有相同架构的新 DataRow。 命名空间:System.Data Compute() 计算用来传递筛选条件的当前行上的给定表达式。 命名空间:System.Data
Compute方法详细介绍
Compute函数的参数就两个:Expression,和Filter 第一个参数Expresstion 1:聚合函数”Sum()” 2:自由计算表达式“20*30+1” 3:bool表达式“1=2” 4:IFF逻辑表达式” IIF(20>1000, 0, 1)” 还支持IsNull,Trim ,SubString等,具体的可以看MSDN 第二个参数Filter 就是一个简单的查询条件。比如,”true”, “Id>4”, “Name like ’%nd’ and sex=’male’”.
相关文档
最新文档