簡體   English   中英

如何在datagridview上驗證所選組合框?

[英]How to validate selected combobox on datagridview?

我目前正在制作一個excel驗證程序。

我想在特定月份下驗證所選的KPI值。 假設所選的KPI列框為“ SALES VOLUME” ,並且選中的復選框為“ JANUARY” ,則僅將驗證JANUARY下的SALES VOLUME KPI。

結果示例應如下所示:

將會彈出一個文本文件,在每月的選定KPI組合框和復選框上顯示此值。

KPI:銷量

類別:澳門及船屋

月:一月

價值:1283091823

僅從一月份開始的KPI 銷售量將被驗證。

供參考,這是UI圖像

我的代碼如下:

從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM