防止空白数据表插入到数据视图中

本文关键字:数据 视图 插入 空白 数据表 | 更新日期: 2023-09-27 18:08:03

我有一个带有文本框的表单,它将数据插入到datagridview中。当我输入数据时,它成功地将数据输入到datagridview中,这很好。但是,如果我关闭表单而不输入数据,它将在datagridview中插入一个空白行,然后在它下面开始一个新行,准备接收更多数据。如何防止它插入空白行?

public partial class newquoteForm : Form
{ 
    public newquoteForm()
    {
        InitializeComponent();
    }
    DataTable dt = new DataTable();
    public void newquoteForm_Load(object sender, EventArgs e)
    {
       DataRow dr;
        dt.Columns.Add("Item Name");
        dt.Columns.Add("Item Description");
        dt.Columns.Add("Retail Price");
        dt.Columns.Add("Cost Price");
        dt.Columns.Add("In Stock");
        dt.Columns.Add("On Jobs");
        dr = dt.NewRow();
        dataGridView1.DataSource = dt;       
    }
    public void addBTN_Click(object sender, EventArgs e)
    {
        additemForm additemForm = new additemForm();
        additemForm.ShowDialog();
        dt.Rows.Add(additemForm.strItem, additemForm.strDesc, additemForm.strRetail); // some methods are missing, Don't worry about it.
        dataGridView1.DataSource = dt;
    }
}

防止空白数据表插入到数据视图中

看起来您的AddItemForm有一些属性,您可以在addBTN_Click执行时使用它们来创建新行。您永远不会检查AddItemForm是否正确初始化了这些属性。你只是随意添加这些属性的值,即使这些值是空的。我会添加一个属性到AddItemFormIsValid,只有当其他属性被正确初始化时才为真。然后在创建新行之前检查。

在你的AddItemForm:
public bool IsValid {
    get {
        return !string.IsNullOrEmpty(txtStrItem.Text) &&
               !string.isNullOrEmpty(your other textboxes)...;
        // I'm just guessing here what controls your form has. you should see the point though
    }
}

然后当你创建新的行:

using (var addItemForm = new AddItemForm()) {
    if (addItemForm.ShowDialog() == DialogResult.OK) {
        if (addItemForm.IsValid) {
            dt.Rows.Add(additemForm.strItem, additemForm.strDesc, additemForm.strRetail);
        }
    }
}    

假设我创建了一个带有三个文本框的additemForm表单,然后在表单的末尾设置strItem,strDesc和strRetail属性。我还将设置对话框结果:

 void additemForm_Closing(object sender, CancelEventArgs e)
    {
        strItem = this.textBox1.Text;
        strDesc = this.textBox2.Text;
        strRetail = this.textBox3.Text;
        //You can check anything here
        if (string.IsNullOrEmpty(strItem))
        {
            this.DialogResult = DialogResult.Cancel;
        }
        else
        {
            this.DialogResult = DialogResult.OK;
        }
    }

现在在主窗体中,您可以检查对话框的结果,然后对其进行操作:

 additemForm additemForm = new additemForm();
        DialogResult dialogResult = additemForm.ShowDialog();
        if (dialogResult == DialogResult.Cancel)
        {
            return;
        }
        dt.Rows.Add(additemForm.strItem, additemForm.strDesc, additemForm.strRetail); // some methods are missing, Don't worry about it.
        dataGridView1.DataSource = dt;