Как найти индекс элемента в двумерном массиве

133
18 августа 2019, 15:20

День добрый, реализовываю замену элемента в массиве по индексу через DGV. Выглядит следующим образом (получаю значение элемента по выделенной ячейке DGV):

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        string s = dataGridView1.CurrentCell.Value.ToString();
        textBox1.Text = s;
    }

Вопрос вот в чем, каким образом можно получить индекс элемента в выбранной ячейке? Пробовал следующим образом, но не вышло, получаю общий размер массива:

textBox2.Text = a.GetLength(0).ToString() + " // " + a.GetLength(1).ToString();
Answer 1

Чтоб не заниматься бестолковой ерундой, т.е. не писать такое

textBox1.Text = "Фигня";

или

var selectedCell = dataGridView1.CurrentCell.Value.ToString();

Уже во второй версии Windows Forms были придуманы Data Bindings или по-русски Привязка данных.

Допустим мы в программе работаем с классом

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Создадим такой интерфейс

У DGV создадим необходимые столбцы с указанием к какому свойству необходимо привязаться

Для привязывания коллекции людей к DGV и текстбоксам, будем использовать класс BindingSource

Вот код формы с комментариями

public partial class MainView : Form
{
    //данные для приложения
    private AppDataContext _data = new AppDataContext();
    //источник данных (Люди) для контролов 
    private BindingSource _bsPeople = new BindingSource();
    public MainView()
    {
        InitializeComponent();
        //установка привязок
        SetBindings();
        //загрузка данных
        LoadData();
        //настройка окна
        this.StartPosition = FormStartPosition.CenterScreen;
        this.Text = "Пример работы с привязками";
    }
    private void SetBindings()
    {
        //определяем тип источника данных
        _bsPeople.DataSource = typeof(List<Person>);
        //привязка для DGV
        _dataGridViewPeople.AutoGenerateColumns = false;
        _dataGridViewPeople.DataSource = _bsPeople;
        //привязка у текстбоксов
        _textBoxFirstName.DataBindings.Add("Text", _bsPeople, nameof(Person.FirstName));
        _textBoxLastName.DataBindings.Add("Text", _bsPeople, nameof(Person.LastName));
    }
    private void LoadData()
    {
        _bsPeople.DataSource = _data.GetPeople();
    }
}

И так это работает

Заметьте мы установили только привязки. Мы в DGV не занимаемся поиском выбранного человека и извлечением данных из его свойств, все за нас делают привязки!

Пример можно скачать здесь

READ ALSO
Путь к компилятору c#. JetBrains Rider

Путь к компилятору c#. JetBrains Rider

Не могу отыскать компилятор в JetBrains RiderПрошу указать путь к папке в которой он находится

121
Выдает ошибку во всех проектах Visual Studio

Выдает ошибку во всех проектах Visual Studio

Создаю проект за проектом и вот этоЕррор за еррором

130
Зависимость textbox от combobox

Зависимость textbox от combobox

Необходимо реализовать программу Которая рассчитывает например окружность, трапецию и параболу

99