1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Windows.Forms;
5
using System.Data;
6
using System.Drawing;
7
using System.ComponentModel;
8
9
namespace OtherTools
10
{
11
class DataGridViewAddSumRow
12
{
13
private DataGridView dgv = null;
14
private DataTable dt = null;
15
public DataGridViewAddSumRow()
16
{
17
}
18
/// <summary>
19
/// 设置表格的数据源
20
/// </summary>
21
public DataTable dataTableName
22
{
23
set
24
{
25
this.dt = value;
26
}
27
}
28
/// <summary>
29
///传递表格的名称
30
/// </summary>
31
public DataGridView DgvName
32
{
33
set
34
{
35
dgv = value;
36
}
37
}
38
/// <summary>
39
/// 开始添加合计行
40
/// </summary>
41
public void begin()
42
{
43
initDgv();
44
}
45
private void initDgv()
46
{
47
if (dgv != null)
48
{
49
50
this.dgv.DataSourceChanged += new EventHandler(dataGridView_DataSourceChanged);
51
this.dgv.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView_ColumnHeaderMouseClick);
52
this.dgv.CellValueChanged += new DataGridViewCellEventHandler(dataGridView_CellValueChanged);
53
this.dgv.AllowUserToAddRows = false;
54
dgv.DataSource = dt;
55
}
56
}
57
/// <summary>
58
/// 计算合计算
59
/// </summary>
60
/// <param name="dgv">要计算的DataGridView</param>
61
private void SumDataGridView(DataGridView dgv)
62
{
63
if (dgv.DataSource == null) return;
64
//DataTable dt = (DataTable)dgv.DataSource;
65
if (dt.Rows.Count < 1) return;
66
decimal[] tal = new decimal[dt.Columns.Count];
67
68
DataRow ndr = dt.NewRow();
69
70
string talc = "";
71
72
int number = 1;
73
foreach (DataRow dr in dt.Rows)
74
{
75
dr["@xu.Hao"] = number++;
76
int n = 0;
77
foreach (DataColumn dc in dt.Columns)
78
{
79
80
81
if (talc == "" && dc.DataType.Name.ToUpper().IndexOf("STRING") >= 0)
82
{ talc = dc.ColumnName; }
83
84
85
if (dc.DataType.IsValueType)
86
{
87
string hej = dr[dc.ColumnName].ToString();
88
try
89
{
90
if (hej != string.Empty) tal[n] += decimal.Parse(hej);
91
}
92
catch (Exception) { }
93
//if (hej != string.Empty) tal[n] += decimal.Parse(hej);
94
}
95
96
97
n++;
98
}
99
}
100
101
ndr.BeginEdit();
102
for (int i = 0; i < dt.Columns.Count; i++)
103
{
104
if (tal[i] != 0)
105
ndr[i] = tal[i];
106
}
107
ndr["@xu.Hao"] = ((int)(dt.Rows.Count + 1)).ToString();
108
if (talc != "") ndr[talc] = "合计";
109
ndr.EndEdit();
110
dt.Rows.Add(ndr);
111
112
dgv.Rows[dgv.Rows.Count - 1].DefaultCellStyle.BackColor = Color.FromArgb(255, 222, 210);
113
dgv.Rows[dgv.Rows.Count - 1].ReadOnly = true;
114
115
if (dgv.Tag == null)
116
{
117
foreach (DataGridViewColumn dgvc in dgv.Columns)
118
{
119
dgvc.SortMode = DataGridViewColumnSortMode.Programmatic;
120
}
121
}
122
dgv.Tag = ndr;
123
}
124
private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
125
{
126
DataGridView sortDgv = (DataGridView)sender;
127
int fx = 0;
128
if (sortDgv.AccessibleDescription == null)
129
{
130
fx = 1;
131
}
132
else
133
{
134
fx = int.Parse(sortDgv.AccessibleDescription);
135
fx = (fx == 0 ? 1 : 0);
136
}
137
sortDgv.AccessibleDescription = fx.ToString();
138
if (sortDgv.Columns[e.ColumnIndex].Name == "@xu.Hao") return;
139
DataGridViewColumn nCol = sortDgv.Columns[e.ColumnIndex];
140
141
if (nCol.DataPropertyName == string.Empty) return;
142
143
if (nCol != null)
144
{
145
sortDgv.Sort(nCol, fx == 0 ? ListSortDirection.Ascending : ListSortDirection.Descending);
146
147
}
148
//--
149
DataRow dr = (DataRow)sortDgv.Tag;
150
DataTable dt = (DataTable)sortDgv.DataSource;
151
DataRow ndr = dt.NewRow();
152
ndr.BeginEdit();
153
for (int i = 0; i < dt.Columns.Count; i++)
154
{
155
ndr[i] = dr[i];
156
}
157
dt.Rows.Remove(dr);
158
159
160
//if (e.ColumnIndex != 0)
161
{
162
int n = 1;
163
for (int i = 0; i < sortDgv.Rows.Count; i++)
164
{
165
DataGridViewRow dgRow = sortDgv.Rows[i];
166
DataRowView drv = (DataRowView)dgRow.DataBoundItem;
167
DataRow tdr = drv.Row;
168
tdr.BeginEdit();
169
tdr["@xu.Hao"] = n;
170
n++;
171
tdr.EndEdit();
172
173
}
174
sortDgv.Refresh();
175
sortDgv.RefreshEdit();
176
177
}
178
ndr["@xu.Hao"] = ((int)(dt.Rows.Count + 1)).ToString();
179
ndr.EndEdit();
180
dt.Rows.Add(ndr);
181
sortDgv.Tag = ndr;
182
183
//--
184
sortDgv.Sort(sortDgv.Columns["@xu.Hao"], ListSortDirection.Ascending);
185
sortDgv.Columns["@xu.Hao"].HeaderCell.SortGlyphDirection = SortOrder.None;
186
nCol.HeaderCell.SortGlyphDirection = fx == 0 ? SortOrder.Ascending : SortOrder.Descending;
187
sortDgv.Rows[sortDgv.Rows.Count - 1].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 210);
188
189
}
190
private void dataGridView_DataSourceChanged(object sender, EventArgs e)
191
{
192
DataGridView dgv = (DataGridView)sender;
193
//DataTable dt = (DataTable)dgv.DataSource;
194
if (dt == null) return;
195
decimal[] tal = new decimal[dt.Columns.Count];
196
if (dt.Columns.IndexOf("@xu.Hao") < 0)
197
{
198
DataColumn dc = new DataColumn("@xu.Hao", System.Type.GetType("System.Int32"));
199
dt.Columns.Add(dc);
200
dgv.Columns["@xu.Hao"].DisplayIndex = 0;
201
dgv.Columns["@xu.Hao"].HeaderText = "序号";
202
203
dgv.Columns["@xu.Hao"].SortMode = DataGridViewColumnSortMode.Programmatic;
204
dgv.AutoResizeColumn(dgv.Columns["@xu.Hao"].Index);
205
206
dgv.Columns["@xu.Hao"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
207
dgv.Columns["@xu.Hao"].Visible = true;
208
}
209
SumDataGridView(dgv);
210
}
211
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
212
{
213
214
DataGridView dgv = (DataGridView)sender;
215
if (dgv.Tag == null || e.RowIndex < 0 || e.RowIndex == dgv.Rows.Count - 1) return;
216
217
string col = dgv.Columns[e.ColumnIndex].DataPropertyName;
218
if (col == string.Empty) return;
219
if (((DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row.Table.Columns[col].DataType.IsValueType)
220
{
221
decimal tal = 0;
222
foreach (DataGridViewRow dgvr in dgv.Rows)
223
{
224
if (dgvr.Index != dgv.Rows.Count - 1)
225
{
226
string hej = dgvr.Cells[e.ColumnIndex].Value.ToString();
227
if (hej != string.Empty) tal += decimal.Parse(hej);
228
}
229
}
230
if (tal == 0)
231
dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = DBNull.Value;
232
else
233
dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = tal;
234
}
235
}
236
237
}
238
}
239
using System;2
using System.Collections.Generic;3
using System.Text;4
using System.Windows.Forms;5
using System.Data;6
using System.Drawing;7
using System.ComponentModel;8

9
namespace OtherTools10
{11
class DataGridViewAddSumRow12
{13
private DataGridView dgv = null;14
private DataTable dt = null;15
public DataGridViewAddSumRow()16
{17
}18
/// <summary>19
/// 设置表格的数据源20
/// </summary>21
public DataTable dataTableName22
{23
set 24
{25
this.dt = value;26
}27
}28
/// <summary>29
///传递表格的名称30
/// </summary>31
public DataGridView DgvName32
{33
set 34
{35
dgv = value;36
}37
}38
/// <summary>39
/// 开始添加合计行40
/// </summary>41
public void begin()42
{43
initDgv();44
}45
private void initDgv()46
{47
if (dgv != null)48
{49
50
this.dgv.DataSourceChanged += new EventHandler(dataGridView_DataSourceChanged);51
this.dgv.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView_ColumnHeaderMouseClick);52
this.dgv.CellValueChanged += new DataGridViewCellEventHandler(dataGridView_CellValueChanged);53
this.dgv.AllowUserToAddRows = false;54
dgv.DataSource = dt;55
}56
}57
/// <summary>58
/// 计算合计算59
/// </summary>60
/// <param name="dgv">要计算的DataGridView</param>61
private void SumDataGridView(DataGridView dgv)62
{63
if (dgv.DataSource == null) return;64
//DataTable dt = (DataTable)dgv.DataSource;65
if (dt.Rows.Count < 1) return;66
decimal[] tal = new decimal[dt.Columns.Count];67

68
DataRow ndr = dt.NewRow();69

70
string talc = "";71

72
int number = 1;73
foreach (DataRow dr in dt.Rows)74
{75
dr["@xu.Hao"] = number++;76
int n = 0;77
foreach (DataColumn dc in dt.Columns)78
{79

80

81
if (talc == "" && dc.DataType.Name.ToUpper().IndexOf("STRING") >= 0) 82
{ talc = dc.ColumnName; }83

84

85
if (dc.DataType.IsValueType)86
{87
string hej = dr[dc.ColumnName].ToString();88
try89
{90
if (hej != string.Empty) tal[n] += decimal.Parse(hej);91
}92
catch (Exception) { }93
//if (hej != string.Empty) tal[n] += decimal.Parse(hej);94
}95

96

97
n++;98
}99
}100

101
ndr.BeginEdit();102
for (int i = 0; i < dt.Columns.Count; i++)103
{104
if (tal[i] != 0)105
ndr[i] = tal[i];106
}107
ndr["@xu.Hao"] = ((int)(dt.Rows.Count + 1)).ToString();108
if (talc != "") ndr[talc] = "合计";109
ndr.EndEdit();110
dt.Rows.Add(ndr);111

112
dgv.Rows[dgv.Rows.Count - 1].DefaultCellStyle.BackColor = Color.FromArgb(255, 222, 210);113
dgv.Rows[dgv.Rows.Count - 1].ReadOnly = true;114

115
if (dgv.Tag == null)116
{117
foreach (DataGridViewColumn dgvc in dgv.Columns)118
{119
dgvc.SortMode = DataGridViewColumnSortMode.Programmatic;120
}121
}122
dgv.Tag = ndr;123
}124
private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)125
{126
DataGridView sortDgv = (DataGridView)sender;127
int fx = 0;128
if (sortDgv.AccessibleDescription == null)129
{130
fx = 1;131
}132
else133
{134
fx = int.Parse(sortDgv.AccessibleDescription);135
fx = (fx == 0 ? 1 : 0);136
}137
sortDgv.AccessibleDescription = fx.ToString();138
if (sortDgv.Columns[e.ColumnIndex].Name == "@xu.Hao") return;139
DataGridViewColumn nCol = sortDgv.Columns[e.ColumnIndex];140

141
if (nCol.DataPropertyName == string.Empty) return;142

143
if (nCol != null)144
{145
sortDgv.Sort(nCol, fx == 0 ? ListSortDirection.Ascending : ListSortDirection.Descending);146

147
}148
//--149
DataRow dr = (DataRow)sortDgv.Tag;150
DataTable dt = (DataTable)sortDgv.DataSource;151
DataRow ndr = dt.NewRow();152
ndr.BeginEdit();153
for (int i = 0; i < dt.Columns.Count; i++)154
{155
ndr[i] = dr[i];156
}157
dt.Rows.Remove(dr);158

159

160
//if (e.ColumnIndex != 0)161
{162
int n = 1;163
for (int i = 0; i < sortDgv.Rows.Count; i++)164
{165
DataGridViewRow dgRow = sortDgv.Rows[i];166
DataRowView drv = (DataRowView)dgRow.DataBoundItem;167
DataRow tdr = drv.Row;168
tdr.BeginEdit();169
tdr["@xu.Hao"] = n;170
n++;171
tdr.EndEdit();172

173
}174
sortDgv.Refresh();175
sortDgv.RefreshEdit();176

177
}178
ndr["@xu.Hao"] = ((int)(dt.Rows.Count + 1)).ToString();179
ndr.EndEdit();180
dt.Rows.Add(ndr);181
sortDgv.Tag = ndr;182

183
//--184
sortDgv.Sort(sortDgv.Columns["@xu.Hao"], ListSortDirection.Ascending);185
sortDgv.Columns["@xu.Hao"].HeaderCell.SortGlyphDirection = SortOrder.None;186
nCol.HeaderCell.SortGlyphDirection = fx == 0 ? SortOrder.Ascending : SortOrder.Descending;187
sortDgv.Rows[sortDgv.Rows.Count - 1].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 210);188

189
}190
private void dataGridView_DataSourceChanged(object sender, EventArgs e)191
{192
DataGridView dgv = (DataGridView)sender;193
//DataTable dt = (DataTable)dgv.DataSource;194
if (dt == null) return;195
decimal[] tal = new decimal[dt.Columns.Count];196
if (dt.Columns.IndexOf("@xu.Hao") < 0)197
{198
DataColumn dc = new DataColumn("@xu.Hao", System.Type.GetType("System.Int32"));199
dt.Columns.Add(dc);200
dgv.Columns["@xu.Hao"].DisplayIndex = 0;201
dgv.Columns["@xu.Hao"].HeaderText = "序号";202

203
dgv.Columns["@xu.Hao"].SortMode = DataGridViewColumnSortMode.Programmatic;204
dgv.AutoResizeColumn(dgv.Columns["@xu.Hao"].Index);205

206
dgv.Columns["@xu.Hao"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;207
dgv.Columns["@xu.Hao"].Visible = true;208
}209
SumDataGridView(dgv);210
}211
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)212
{213

214
DataGridView dgv = (DataGridView)sender;215
if (dgv.Tag == null || e.RowIndex < 0 || e.RowIndex == dgv.Rows.Count - 1) return;216

217
string col = dgv.Columns[e.ColumnIndex].DataPropertyName;218
if (col == string.Empty) return;219
if (((DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row.Table.Columns[col].DataType.IsValueType)220
{221
decimal tal = 0;222
foreach (DataGridViewRow dgvr in dgv.Rows)223
{224
if (dgvr.Index != dgv.Rows.Count - 1)225
{226
string hej = dgvr.Cells[e.ColumnIndex].Value.ToString();227
if (hej != string.Empty) tal += decimal.Parse(hej);228
}229
}230
if (tal == 0)231
dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = DBNull.Value;232
else233
dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = tal;234
}235
}236
237
}238
}239



浙公网安备 33010602011771号