DataGridView无法以编程方式加载数据

时间:2019-01-17 10:02:40

标签: c# winforms datagridview

我正在使用Windows应用程序,当用户单击按钮(Add)时,我从TextBox获得输入并将其添加到DataGridView。

enter image description here

我的问题是,当我第一次添加文本时,它可以正常工作并将其添加到网格中。
当我添加新文本时,不会将其添加到DataGridView中。一旦关闭窗体并使用相同的对象重新打开,我就能看到它。

代码:

private void btnAddInput_Click(object sender, EventArgs e)
{
    if (Data == null)
        Data = new List<Inputs>();

    if (!string.IsNullOrWhiteSpace(txtInput.Text))
    {
        Data.Insert(Data.Count, new Inputs()
        {
            Name = txtInput.Text,
            Value = string.Empty
        });
    }
    else
    {
        MessageBox.Show("Please enter parameter value", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }

    txtInput.Text = "";
    gridViewInputs.DataSource = Data;
}

我不确定是什么原因导致第二次添加按钮单击时未将记录添加到网格中。

1 个答案:

答案 0 :(得分:1)

您可以在设置新的DataGridView.DataSource之前将null设置为 List<Inputs>
这将导致DataGridView使用源DataSource中的新数据刷新其内容:
仅当DataSource引用不同于当前引用或设置为null时,基础DataGridViewDataConnection才会重置。

请注意,当您重置RowsRemoved时,会多次引发 List 事件(每删除一次行一次)。

我建议将List<T>更改为BindingList,因为对List的任何更改都会自动反映出来,并且如果需要的话,它将允许从DataGridView中删除行:使用< strong> BindingList<Inputs> InputData = new BindingList<Inputs>(); ,因为DataSource不允许删除行。

false

如果您不希望用户篡改网格内容,则可以始终将AllowUserToDeleteRowsAllowUserToAddRows属性设置为public class Inputs { public string Name { get; set; } public string Value { get; set; } } internal BindingList<Inputs> InputData = new BindingList<Inputs>(); private void Form1_Load(object sender, EventArgs e) { dataGridView1.DataSource = InputData; } private void btnAddInput_Click(object sender, EventArgs e) { string textValue = txtInput.Text.Trim(); if (!string.IsNullOrEmpty(textValue)) { InputData.Add(new Inputs() { Name = textValue, Value = "[Whatever this is]" }); txtInput.Text = ""; } else { MessageBox.Show("Not a valid value"); } }

例如:

List<T>

如果您想继续使用DataGridView.DataSource,请添加重置private void btnAddInput_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(textValue)) { //(...) dataGridView1.DataSource = null; dataGridView1.DataSource = InputData; txtInput.Text = ""; } //(...) 所需的代码:

routes.js