C# Winform 数据网格的增删改查操作

3

我使用3层应用程序。我已经创建了数据访问层和业务层。如何将它们与我的视图层上的Datagrid绑定?

public partial class Magasinier : Form
{
    Magasinier_BL oMag_BL = new Magasinier_BL();

    public Magasinier()
    {
        InitializeComponent();
        GetDataOrdre();
    }

    public void GetDataOrdre()
    {            
        dataGridView_Mag.DataSource = oMag_BL.Get_All_Magasinier_BL();
        dataGridView_Mag.DataMember = "MagTable";
    }


}

  private void Del_Mag(object sender, DataGridViewRowCancelEventArgs e)
    {
        if (!e.Row.IsNewRow)
        {
            DialogResult res = MessageBox.Show("Etes-vous sûr de vouloir supprimer cette ligne ?", "confirmation suppression",
                     MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (res == DialogResult.No)
            {
                e.Cancel = true;
            }
            else
            {
                oMag_BL.DelMag_BL(e.Row.Cells["CODE_MAG"].Value.ToString());
            }

        }
    }

我已经完成了“读取”和“删除”,但是没有完成“创建”和“更新”。
我应该如何将这些“创建”和“更新”连接到我的业务层?另外,我如何检索新行值或更改行值?
以下是我在ASP.NET中所做的内容:创建。
 protected void Insrting_Obj_ClientMag(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e)
{
    Pers_Magasinier oPersMag = new Pers_Magasinier();
    oPersMag.NoClient = Id;
    oPersMag.CodeMag = e.NewValues["CODE_MAG"].ToString();
    oPersMag.NomUsr = e.NewValues["NOM"].ToString();
    oPersMag.PrenomUsr = e.NewValues["PRENOM"].ToString();
    oPersMag.MemoMag = e.NewValues["MEMO"].ToString();

    oMag_BL.InstUpdtMag_BL(oPersMag, true);       

    //To Stop processing Gridview
    ASPxGridView_Mag.CancelEdit();
    e.Cancel = true;

    //Rebind donne
    GetDataMags();
}

更新:

protected void Updting_Obj_ClientMag(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
{
    Pers_Magasinier oPersMag = new Pers_Magasinier();
    oPersMag.NoClient = Id;
    oPersMag.CodeMag = e.NewValues["CODE_MAG"].ToString();
    oPersMag.NomUsr = e.NewValues["NOM"].ToString();
    oPersMag.PrenomUsr = e.NewValues["PRENOM"].ToString();
    oPersMag.MemoMag = e.NewValues["MEMO"].ToString();

    oMag_BL.InstUpdtMag_BL(oPersMag, false);      

    ASPxGridView_Mag.CancelEdit();
    e.Cancel = true;
    GetDataMags();
}

现在我该如何在WinForm中实现这个功能呢?谢谢您提前的帮助。
1个回答

1
更新: 要使创建/更新工作正常,通常使用网格行编辑模板控件(它基本上是另一个WinForm,允许您进行额外的验证并创建/更新现有值)。Infragistics提供了很好的控件。
  1. 您需要确保在网格中使用BindingSource,这样当您更新集合中的项目时,它会自动在网格中更新
  2. 您还需要确保您的BusinessObject/DomainModel/CollectionItem实现了INotifyPropertyChanged,这样当您在业务层中更新值时,它会自动在网格中更新
  3. 单击“创建/更新”按钮时,它将加载现有值(如果正在更新,则为新的默认值)到行编辑模板控件中
  4. 点击“提交创建”后,它将创建新的BusinessObject并将其添加到您的集合中。由于您的集合绑定到网格上,因此网格将自动刷新。
  5. 如果您在集合中更新相同的引用对象,则通过“提交更新”也是如此,任何更新都应该反映在网格中
你可能需要修正你的标签,因为你所说的是 ASP 而不是 WinForms。
我目前正在使用带有 ASP MVC 2 的 Telerik Grid。它可以很好地将你的数据序列化到 ViewModel 中,并且你可以在控制器中使用 ViewModel(大部分时间都不必纠缠于 Request.Params)。 查看 Telerik GridASP MVC

感谢您的回复。我是ASP.NET程序员,但现在也做Winform开发。我该如何将创建和更新ASP.NET代码转换为Winform呢? - user609511
谢谢您的回复,您有示例吗? - user609511
我手头没有它。请阅读有关BindingSource以及如何与Grid一起使用的内容。 - Bek Raupov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接