可能是一个复杂的问题 - 但这里希望
我只需在数据集中交换表格,就可以在单个表单上显示通用数据网格(显示我想要的数据集表格)。
我想双击给定记录并显示表格数据的单记录视图,当前所选记录显示为默认值,但是可以选择翻阅和编辑/查看/删除其他记录,即< / 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
}
以下任何帮助表示赞赏
提前致谢。
答案 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)
好的 - 让它现在正常工作 - 必须采取不同的方法
创建了一个名为PassBindingSource的静态类,其静态属性bst用于将绑定源从gridview传递到详细信息表单
静态类PassBindingSource { public static BindingSource bst {get;组; } }
在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;
}
<强>概要强> 现在一切正常 - 在运行时生成的detailsView控件正确连接到绑定源,并且datagrid可以随时使用数据集中的任何表调用此detailsView,方法是使用以下代码连接gridview的双击事件< / p>
PassBindingSource.bst= bs;
frmDetailsView nf = new frmDetailsView();
nf.Show();
希望这有助于他人。非常感谢User2354374的初步引导。