winforms 如何检测datagridview中的空白空间,并在为空时警告屏幕?

g6ll5ycj  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(155)
  • 我只希望Datagridview1中的表中有3列不为空。我希望它在出现空字段时警告屏幕。
  • 我尝试在datagridview1表中设置一个必填字段
  • 当我在Datagridview中将其他数据添加到我从sql拉取的数据中时,我希望它警告屏幕在不应该有空白空间的情况下被填充。
  • 正如你在下面的照片中看到的,只有那些地方不应该是空的,当我按保存,它应该检测到当有一个空白的空间,并给予屏幕一个警告。
  • 如果有可用空间,则给予警告
private void btn_Save_Click(object sender, EventArgs e)
        {

            SqlCommand cmd = new SqlCommand("Select * from Envanter where BilgNo,VarlikSahibi,IP", baglanti);
            cmd.Parameters.AddWithValue("BilgNo", dataGridView1);
            cmd.Parameters.AddWithValue("VarlikSahibi", dataGridView1);
            cmd.Parameters.AddWithValue("IP", dataGridView1);

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {


                commandBuilder = new SqlCommandBuilder(da);
                da.Update(tablo);
                MessageBox.Show("Saved");
                Envanter();

                return;
                
                /*
                if (dataGridView1.Rows.Cells[1].Value == null | Convert.ToString(row.Cells[1].Value) | string.IsNullOrEmpty)
                {
                    DialogResult dr = MessageBox.Show("pls no empty", "Warn!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                return;
                */
                
            }

        }

4xrmg8kj

4xrmg8kj1#

如果您使用的是普通的C#模型类,则可以依赖data annotations validation attributes
如果使用DataTable作为模型,则可以通过设置列或行错误来执行validate the DataTable,并检查数据表是否有错误。
您还可以查看DataGridView的行或单元格,并设置单元格或行错误,无论是否进行数据绑定。

示例-验证DataGridView的单元格并显示单元格错误

private bool ValidateCell(DataGridViewCell cell)
{
    //Validation rules for Column 1
    if (cell.ColumnIndex == 1)
    {
        if (cell.Value == null ||
            cell.Value == DBNull.Value ||
            string.IsNullOrEmpty(cell.Value.ToString()))
        {
            cell.ErrorText = "Required";
            return false;
        }
        else
        {
            cell.ErrorText = null;
            return true;
        }
    }

    //Other validations
    return true;
}
private bool ValidateDataGridView(DataGridView dgv)
{
    return dgv.Rows.Cast<DataGridViewRow>()
        .Where(r => !r.IsNewRow)
        .SelectMany(r => r.Cells.Cast<DataGridViewCell>())
        .Select(c => ValidateCell(c)).ToList()
        .All(x => x == true);
}

然后在保存数据之前使用上述方法:

private void SaveButton_Click(object sender, EventArgs e)
{
    if (!ValidateDataGridView(dataGridView1))
    {
        MessageBox.Show("Please fix validation errors");
        return;
    }
    //Save changes;
}

若要显示DataGridView的单元格或行上的错误,请将ShowRowErrorsShowCellErrors设置为true。

dataGridView1.DataSource = dt;
dataGridView1.ShowCellErrors = true;

此外,如果要更新单元格的验证,请在编辑单元格后:

private void DataGridView1_CellValueChanged(object sender, 
    DataGridViewCellEventArgs e)
{
    ValidateCell(dataGridView1[e.ColumnIndex, e.RowIndex]);
}
flvlnr44

flvlnr442#

首先迭代数据集行,然后迭代每个单元格的值,如果有任何空值,将您选择的消息框返回给用户。请查找以下附加代码以供参考。

您可以执行以下操作:

foreach (DataGridViewRow rw in this.dataGridView1.Rows)
{
  for (int i = 0; i < rw.Cells.Count; i++)
  {
    if (rw.Cells[i].Value == null || rw.Cells[i].Value == DBNull.Value || String.IsNullOrWhiteSpace(rw.Cells[i].Value.ToString())
    {
      // here is your input message box...
        string promptValue = Prompt.ShowDialog("Message", "some other string you want!");
    }
    else 
    {
      // Proceed with the things you want to do..
    }
  } 
}

并使用以下代码创建输入弹出窗口:

public static class Prompt
{
    public static string ShowDialog(string text, string caption)
    {
        Form prompt = new Form()
        {
            Width = 500,
            Height = 150,
            FormBorderStyle = FormBorderStyle.FixedDialog,
            Text = caption,
            StartPosition = FormStartPosition.CenterScreen
        };
        Label textLabel = new Label() { Left = 50, Top=20, Text=text };
        TextBox textBox = new TextBox() { Left = 50, Top=50, Width=400 };
        Button confirmation = new Button() { Text = "Ok", Left=350, Width=100, Top=70, DialogResult = DialogResult.OK };
        confirmation.Click += (sender, e) => { prompt.Close(); };
        prompt.Controls.Add(textBox);
        prompt.Controls.Add(confirmation);
        prompt.Controls.Add(textLabel);
        prompt.AcceptButton = confirmation;

        return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : "";
    }
}

您可以使用以下命令调用它:

string promptValue = Prompt.ShowDialog("Message", "some other string you want!");

相关问题