Связать несколько компонентов и данные

Алексей Ку.
Дата: 26.05.2014 15:06:45
Добрый день, знатоки!
Подскажите пожалуйста как сделать следующее:
Есть определённая структура в БД. На грид выводится список записей. При выборе записи, справа на панели надо выводить список дополнительных параметров, которые можно менять.

Грид заполняется запросов linq. Вопрос: как, например, к textbox привязать какое-то дополнительное поле по этой записи? Соответственно при изменении textbox фиксировать изменения в базе.

В Borland C++ Builder с этим прекрасно справляются компоненты типа TDBEdit. Какой аналог в WinForms? Мне надо копать в сторону DataBindings? Ссылочки само собой приветствуются!

Спасибо!
Алексей Ку.
Дата: 27.05.2014 18:10:46
Переформулирую задачу:
Есть процедура p_Get. Возвращает колонку "Id". Эти данные отображаются на datagridview1.
При клике по datagridview1 надо из таблицы t_table выбрать поле "Name" где "Id" = "выбранный на гриде ID" отобразить его в textbox1. Ну само собой чтобы изменения в textbox1 сохранялись в базе.

Для работы с базой создаётся DataContext (Linq to Sql Classes) куда добавляются таблицы t_table и процедура p_Get.

Как работать с этими чортовыми databindings? Как связать два компонента, каждый из которых смотрит на разные источники данных, но один связан с другим?

Помогите пожалуйста! Уже который час ломаю голову над этим...
pation
Дата: 27.05.2014 18:28:35
Алексей Ку.,

а что мсдн уже отключили?
Алексей Ку.
Дата: 27.05.2014 18:31:10
pation,

Само собой МСДН первое куда я полез. Но, к сожалению, МСДН не всегда настолько ясен и понятен (по крайней мер для меня), чтобы сразу реализовать задуманное! Я перепробовал уже кучу вариантов. Ну не получается у меня связать. Я прошу помочь конкретным примером!
pation
Дата: 27.05.2014 18:41:41
Алексей Ку.
pation,

Само собой МСДН первое куда я полез. Но, к сожалению, МСДН не всегда настолько ясен и понятен (по крайней мер для меня), чтобы сразу реализовать задуманное! Я перепробовал уже кучу вариантов. Ну не получается у меня связать. Я прошу помочь конкретным примером!


в мсдн есть конкретные примеры
Алексей Ку.
Дата: 27.05.2014 18:50:16
pation
Алексей Ку.
pation,

Само собой МСДН первое куда я полез. Но, к сожалению, МСДН не всегда настолько ясен и понятен (по крайней мер для меня), чтобы сразу реализовать задуманное! Я перепробовал уже кучу вариантов. Ну не получается у меня связать. Я прошу помочь конкретным примером!


в мсдн есть конкретные примеры


Не могли бы вы дать ссылку на конкретный пример?
Где-то в степи
Дата: 27.05.2014 19:01:19
Алексей Ку.
для гугла - binding datagridview to textbox c#
очень много вариантов, есть кины разные
Алексей Ку.
Дата: 27.05.2014 21:06:53
Я не нашёл ни одного примера где данная задача реализуется при помощи DataContext!
Где-то в степи
Дата: 27.05.2014 21:38:33
Алексей Ку.
Я не нашёл ни одного примера где данная задача реализуется при помощи DataContext!

при чем тут datacontext, это вообще абстракция в нашей теме, которая имеет интерфейс : получение данных для грида, получение объекта по id, и сохранение измененного объекта где то, она может быть реализована хоть как: dcom, remoting, soap, голубиная почта, связь нарочным, фельдъегерская почта.
вообще:
автор
Грид заполняется запросов linq

автор
Есть определённая структура в БД

автор
Есть процедура p_Get. Возвращает колонку "Id".

автор
Для работы с базой создаётся DataContext (Linq to Sql Classes) куда добавляются таблицы t_table и процедура p_Get.

это к теме бандига не относится. курите снова - binding datagridview to textbox
или http://msdn.microsoft.com/ru-ru/library/system.windows.forms.control.databindings(v=vs.110).aspx
или делайте тупо на событиях
Кифирчик
Дата: 27.05.2014 22:27:14
конкретный пример, на форме датагрид и два текст бокса.
list - считайте что это то что вы получили через linq.
для записи изменений в базу - берете bs.Current и в вашем контексте делаете апдейт.
    public partial class Form1 : Form
    {
        List<A> list = new List<A>();
        BindingSource bs = new BindingSource();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            list.Add(new A() { Id = 1, Name = "Name1" });
            list.Add(new A() { Id = 2, Name = "Name2" });
            list.Add(new A() { Id = 3, Name = "Name3" });
            list.Add(new A() { Id = 4, Name = "Name4" });

            bs.DataSource = list;

            dataGridView1.DataSource = bs;

            textBox1.DataBindings.Add("Text", bs, "Name");

            bs.CurrentItemChanged += bs_CurrentItemChanged;
        }

        void bs_CurrentItemChanged(object sender, EventArgs e)
        {
            A item = bs.Current as A;
            textBox2.Text = item.ToString();
        }
    }

    public class A : INotifyPropertyChanged
    {
        private int id;
        private string name;

        public int Id
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
                PropertyChangedFun("Id");
            }
        }

        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
                PropertyChangedFun("Name");
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;
        void PropertyChangedFun(string propName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }

        public override string ToString()
        {
            return string.Format("{0}:{1}",id, name);
        }
    }