从GridView c#创建详细信息表单

时间:2013-05-09 06:04:16

标签: c# runtime controls detailsview

可能是一个复杂的问题 - 但这里希望

我只需在数据集中交换表格,就可以在单个表单上显示通用数据网格(显示我想要的数据集表格)。

我想双击给定记录并显示表格数据的单记录视图,当前所选记录显示为默认值,但是可以选择翻阅和编辑/查看/删除其他记录,即< / p>

我想在运行时自动从给定表的数据网格创建详细信息视图表单。应该动态创建表单 - 在详细信息视图中显示数据集,并使用绑定源/绑定源导航器选择单页记录。

我的目标是提高应用程序的效率/可维护性 - 而不是创建和管理10多个表单,我只想创建和管理我的通用详细信息表单,就像我管理通用gridview表单一样。

到目前为止,我已提出:

public void CreateDetailsForm(BindingSource bs,int rowClicked)  {             表格detailsForm = new Form();

        BindingSource newFormBS = new BindingSource();

        //assign binding source for use on new detailsForm
        newFormBS = bs;

        //assign binding source to datatable
        DataTable dt = (DataTable)bs.DataSource;

        //create the form fields
        CreateFormFields(dt);  //not yet implemented

        //assign form fields to form

       //display form

}

以下任何帮助表示赞赏

  1. 生成表单字段并将其分配给表单。
  2. 提前致谢。

3 个答案:

答案 0 :(得分:0)

它喜欢:

Form f=new Form();

        TextBox t=new TextBox();//generate the controls u need
        t.Text = "test";//set the actual value
        t.Location=new Point(10,10);
        f.Controls.Add(t);

        DialogResult dr=f.ShowDialog();

答案 1 :(得分:0)

到目前为止,我已经在表单上生成了col名称,如下所示

列出colNames = GetColumnNames(dt);

        int offset=25;
        int xPos=50;
        int yPos = 10;
        foreach (string name in colNames)
        {
            Label l = new Label();
            l.Name = name;
            l.Width = 200;
            l.Text = name;


            TextBox t = new TextBox();
            t.Name = name; 
            t.Width=200;

            l.Location = new Point(xPos, yPos );
            t.Location = new Point(xPos+250, yPos);


           f.Controls.Add(l);
           f.Controls.Add(t);

           yPos = yPos + offset;
        }
        //TextBox t = new TextBox();//generate the controls u need
        //t.Text = "test";//set the actual value


        f.Width = 800;
        f.Height = 600;
        f.Show();


    }

    private List<string> GetColumnNames(DataTable table)
    {
        List<string> lstColNames=new List<string>();

        if (table != null)
        {

             lstColNames=

                (from DataColumn col in table.Columns

                 select col.ColumnName).ToList();



        }

        return lstColNames;



    }

现在尝试将控件绑定到绑定源!

答案 2 :(得分:0)

好的 - 让它现在正常工作 - 必须采取不同的方法

  1. 创建了一个detailsView Form
  2. 创建了一个名为PassBindingSource的静态类,其静态属性bst用于将绑定源从gridview传递到详细信息表单

    静态类PassBindingSource {    public static BindingSource bst {get;组; } }

  3. 在detailsView表单上添加了以下代码

    try{  bs.DataSource = PassBindingSource.bst;
    
    DataTable dt = (DataTable)PassBindingSource.bst.DataSource;
    
    
    List<string> colNames = GetColumnNames(dt);
    
    int offset = 25;
    int xPos = 50;
    int yPos = 50;
    
    foreach (string name in colNames)
     {
    Label l = new Label();
     l.Name = name;
    l.Width = 200;
    l.Text = name;
    
    
    TextBox t = new TextBox();
     t.Name = name;
    t.Width = 200;
    
     // BindingOperations.SetBinding(t, t.TextProperty, bs);
    
    //binding operation
    t.DataBindings.Add(new Binding("Text", bs, t.Name, true));
    
    l.Location = new Point(xPos, yPos);
    t.Location = new Point(xPos + 250, yPos);
    
    
    this.Controls.Add(l);
    this.Controls.Add(t);
    
    yPos = yPos + offset;
    
    // dgDetailsView.DataSource = bs;
     }
    //move to correct record in binding source
            bs.Position = PassBindingSource.currentRecord;
    }
    catch (Exception ex)
     {
     MessageBox.Show(ex.Message);
    }
    
    
    
    }
    
    
    
    private List<string> GetColumnNames(DataTable table)
    {
    List<string> lstColNames=new List<string>();
    
    if (table != null)
    {
    
          lstColNames=
    
          (from DataColumn col in table.Columns
    
           select col.ColumnName).ToList();
    
    
    }
    
    return lstColNames;
    
    
    
    }
    
  4. <强>概要 现在一切正常 - 在运行时生成的detailsView控件正确连接到绑定源,并且datagrid可以随时使用数据集中的任何表调用此detailsView,方法是使用以下代码连接gridview的双击事件< / p>

    PassBindingSource.bst= bs;
    frmDetailsView nf = new frmDetailsView();
    nf.Show();
    

    希望这有助于他人。非常感谢User2354374的初步引导。