Проблема C#: Как я сохраняю изменения, внесенные в DataGridView назад к используемому DataTable?

select login_date
      ,id
      ,flag
      ,case when flag = 'Y' then min(login_date) over(partition by id,grp) end as flag_date
from (select login_date,id,flag
            ,row_number() over(partition by id order by login_date) - 
             row_number() over(partition by id,flag order by login_date) as grp
      from tbl 
     ) t
  • Сначала классифицируют строки по группам, то есть последовательные «Y» и «N» начинают новое значение, когда ряд разбивается. Это можно сделать с помощью подхода с разницей номеров строк. ( Выполните внутренний запрос, чтобы увидеть, как назначаются номера групп )
  • После того, как группы назначены, вычислить flag_date с условным агрегированием тривиально.

Еще один подход для решения этой проблемы заключается в создании новой группы всякий раз, когда встречается значение «N». Внешний запрос остается прежним, меняется только внутренний.

select login_date
      ,id
      ,flag
      ,case when flag = 'Y' then min(login_date) over(partition by id,grp) end as flag_date 
from (select login_date,id,flag
            ,sum(case when flag = 'N' then 1 else 0 end) over(partition by id order by login_date) as grp
      from tbl 
     ) t
9
задан OneShot 6 February 2009 в 12:02
поделиться

2 ответа

Если Вы используете привязку данных для a DataGridView, затем Вы уже обновляете DataTable / DataSet. Если Вы имеете в виду изменения вниз в базе данных, то это - то, где адаптеры играют роль.

Вот пример:

using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();

        DataSet set = new DataSet();
        DataTable table = set.Tables.Add("MyTable");
        table.Columns.Add("Foo", typeof(int));
        table.Columns.Add("Bar", typeof(string));

        Button btn;
        using (Form form = new Form
        {
            Text = "DataGridView binding sample",
            Controls =
            {
                new DataGridView {
                    Dock = DockStyle.Fill,
                    DataMember = "MyTable",
                    DataSource = set
                },
                (btn = new Button {
                    Dock = DockStyle.Bottom,
                    Text = "Total"
                })
            }
        })
        {
            btn.Click += delegate
            {
                form.Text = table.AsEnumerable().Sum(
                    row => row.Field<int>("Foo")).ToString();
            };
            Application.Run(form);
        }

    }
}
6
ответ дан 4 December 2019 в 23:41
поделиться

поскольку упомянутые DataAdapters являются одним из простых способов.

См.: http://www.codeproject.com/KB/database/relationaladonet.aspx

для довольно простого примера, что я думаю покрытия, в чем нуждаются youu.

0
ответ дан 4 December 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: