![](/img/trans.png)
[英]How to get the value of a selected item in a combobox in a datagridview
[英]How to validate selected combobox on datagridview?
我目前正在制作一個excel驗證程序。
我想在特定月份下驗證所選的KPI值。 假設所選的KPI列框為“ SALES VOLUME” ,並且選中的復選框為“ JANUARY” ,則僅將驗證JANUARY下的SALES VOLUME KPI。
結果示例應如下所示:
將會彈出一個文本文件,在每月的選定KPI組合框和復選框上顯示此值。
KPI:銷量
類別:澳門及船屋
月:一月
價值:1283091823
僅從一月份開始的KPI 銷售量將被驗證。
我的代碼如下:
從ExcelMethods類:
此方法根據選中的復選框每月驗證一次。
public void Validate_Month(DataGridView dataGridView, int month, int select)
{
int kpi = 2;
int category = 3;
decimal num;
FileStream fs = new FileStream(@"C:\brandon\InvalidColumnsByMonth.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
StringBuilder sb = new StringBuilder();
if (dataGridView.ColumnCount > 3)
{
for (int h = select; h <= month; h++)
{
for (int i = 0; i < dataGridView.RowCount; i++)
{
if (!Decimal.TryParse(dataGridView[h, i].Value.ToString(), out num))
{
if (dataGridView[h, i].Value.ToString() == null || dataGridView[h, i].Value.ToString() == "")
{
}
else
{
sb.AppendLine("[KPI]: " + dataGridView.Rows[i].Cells[kpi].Value.ToString());
sb.AppendLine("[Category]: " + dataGridView.Rows[i].Cells[category].Value.ToString());
sb.AppendLine("[Month]:" + dataGridView.Columns[h].Name.ToUpper());
sb.AppendLine("[VALUE]: " + dataGridView[h, i].Value.ToString() + "");
sb.AppendLine("");
sw.WriteLine("[KPI]: " + dataGridView.Rows[i].Cells[kpi].Value.ToString());
sw.WriteLine("[Category]: " + dataGridView.Rows[i].Cells[category].Value.ToString());
sw.WriteLine("[Month]:" + dataGridView.Columns[h].Name.ToUpper());
sw.WriteLine("[VALUE]: {" + dataGridView[h, i].Value.ToString() + "}");
sw.WriteLine("");
}
}
}
}
if (sb.Length != 0 )
{
MessageBox.Show(sb.ToString());
Process.Start(@"C:\brandon\InvalidColumnsByMonth.txt");
}
else
{
int h = select;
MessageBox.Show("No errors in month of " + dataGridView.Columns[h].Name + ".");
}
sw.Flush();
sw.Close();
}
}
從我的中一班上
僅供參考ExcelMethods方法Validate_Month
public void Validate(CheckBox cb, DataGridView dataGridView1, String month, int i)
{
if (cb.Checked == true && dataGridView1.Columns.Contains(month) )
{
ExcelMethods.Validate_Month(dataGridView1, 4 + i, 4 + i);
}
}
最后,在Form 1 Class中是btnValidateAll_MouseClick方法
private void btnValidate_MouseClick(object sender, MouseEventArgs e)
{
Validate(checkBox1, dataGridView1, "January", 0);
Validate(checkBox2, dataGridView1, "February", 1);
Validate(checkBox3, dataGridView1, "March", 2);
Validate(checkBox4, dataGridView1, "April", 3);
Validate(checkBox5, dataGridView1, "May", 4);
Validate(checkBox6, dataGridView1, "June", 5);
Validate(checkBox7, dataGridView1, "July", 6);
Validate(checkBox8, dataGridView1, "August", 7);
Validate(checkBox9, dataGridView1, "September", 8);
Validate(checkBox10, dataGridView1, "October", 9);
Validate(checkBox11, dataGridView1, "November", 10);
Validate(checkBox12, dataGridView1, "December", 11);
}
您要使用驗證方法進行網格驗證。 確保網格已附加事件。
e具有列和行索引屬性。 您可以將e.Cancel設置為true以將其分配給未驗證。
private void dataGridView_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
// Gets Your Row & Column, 4 is Jan in this case
if ( e.ColumnIndex == 4 && e.RowIndex >= 0 )
{
// Do Your Validation
// If False. Set
// e.Cancel = true;
}
}
或根據您對validate的定義:
更改您的方法定義:
public void Validate_Month(DataGridView dataGridView, int month, int select, string kpi)
更改您的驗證:
if ((dataGridView[2, i].Value.ToString() == kpi || kpi == "" || kpi == null) && !Decimal.TryParse(dataGridView[h, i].Value.ToString(), out num))
這樣,它將僅在匹配的kpi上匹配。 我已經進行了設置,因此如果kpi作為空白或null傳入,它也將匹配所有行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.