DataGridView поиск и обновление данных

102
22 февраля 2022, 02:10

Как при передачи объекта в dataGridView, найти нужную строку и обновить ее не затрагивая остальные строки. Я делаю вот так: dataGridView.DataSource = editedObj, после этого данные не отображаются.

Answer 1

тут, для начала, нужно определиться, в каком коллекции ты хранишь данные.

например, я сделал небольшой пример с добавлением новой строки и обновлением dataGridView автоматически. Если использовать BindingList

public BindingList<MyTest> Test { get; set; }
public Form1()
{
    Test = new BindingList<MyTest>() { new MyTest() { Name = "Тест" } };
    InitializeComponent();
    dataGridView1.DataSource = Test;
}
public class MyTest
{
    public string Name { get; set; }
}
private void Button1_Click(object sender, System.EventArgs e)
{
    Test.Add(new MyTest() { Name = "Тест2" });
}

другой пример со сбрасыванием DataSource и присваивании ей нового значения

public List<MyTest> Test { get; set; }

public Form1()
{
    Test = new List<MyTest>() { new MyTest() { Name = "Тест" } };
    InitializeComponent();
    dataGridView1.DataSource = Test;
}

public class MyTest
{
    public string Name { get; set; }
}
private void Button1_Click(object sender, System.EventArgs e)
{
    Test.Add(new MyTest() { Name = "Тест2" });
    dataGridView1.DataSource = null;
    dataGridView1.DataSource = Test;
}

На основе твоего ответа: Первая форма(главная)

public BindingList<MyTest> Test { get; set; }

public Form1()
{
    Test = new BindingList<MyTest>() { new MyTest() { Name = "Тест", Age = 5 } };
    InitializeComponent();
    dataGridView1.DataSource = Test;
}

public class MyTest
{
    public string Name { get; set; }
    public int Age { get; set; }
}
private void Button1_Click(object sender, System.EventArgs e)
{            
    var editForm = new EditRow(dataGridView1.CurrentRow);
    var dialog = editForm.ShowDialog();
    if(dialog == DialogResult.Cancel)
    {
        dataGridView1.CurrentRow.Cells[0].Value = editForm.textBox1.Text;
        dataGridView1.CurrentRow.Cells[1].Value = editForm.textBox2.Text;
    }
}

вторая форма

public EditRow(DataGridViewRow row)
        {
            InitializeComponent();
            textBox1.Text = row.Cells[0].Value.ToString();
            textBox2.Text = row.Cells[1].Value.ToString();
        }
        private void Button1_Click(object sender, EventArgs e)
        {            
            this.Close();
        }

и сделай textBox1 и textBox2 в коде дизайнера public Теперь работает редактирование через новое создаваемое окно.

READ ALSO
Работа с классами,объекты

Работа с классами,объекты

Каким образом возможно передать массиву Intermediate_Cpp[3] класса Course{}; ,который в свою очередь является объектом этого класса,объекты student1, student2,...

104
Проблема с использование функции в двух обьектах C++

Проблема с использование функции в двух обьектах C++

При использовании одной в двух обьектах работает только один, второй отказываетсяИгра Кораблики , функция начинает игру и используется в двух...

91
cmake config mode

cmake config mode

Если у меня есть header-only библиотека и есть xxxConfigcmake, я делаю find_package(xxx CONFIG REQUIRED)

107