如何添加多个文本框,后跟 DataGridView.Columns.Count 和列 data.TQ
How to add multiple TextBox follow by DataGridView.Columns.Count and column data.TQ
//...
{
public Form1()
{
InitializeComponent();
LoadData();
textBoxFill();
}
private void LoadData()
{
SqlConnection SCConnect = new SqlConnection("Server=localhost;Initial Catalog=T8;Integrated Security=SSPI;");
SCConnect.Open();
StringBuilder SBBuilder = new StringBuilder("Select * from Table8");
SqlDataAdapter SDA = new SqlDataAdapter(SBBuilder.ToString(), SCConnect);
SqlCommandBuilder SCB = new SqlCommandBuilder(SDA);
DataTable DT = new DataTable();
SDA.Fill(DT);
dataGridView1.DataSource = DT;
}
private void textBoxFill()
{
TextBox TB = new TextBox();
int A = 1;
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
panel1.Controls.Add(TB);
TB.Location = new Point(10, (A * 20));
TB.Top = A * 28;
TB.Size = new Size(200, 50);
TB.Margin = new Padding(10, 10, 10, 10);
}
A = A + 1;
}
}
如何添加多个 TextBox 后跟 DataGridView.Columns.Count 和
每个 TextBox 填充每个 DataGridView 列 data.TQ?
我在查看之前的副本后猜测 post,这可能就是您要查找的内容。如果您解释了整体情况,这可能会对您有所帮助,因为这似乎是一件奇怪的事情,因为数据已经在网格中并且用户可以对其进行编辑,我不确定您为什么要在面板中“复制”此数据.
但是,您似乎确实希望文本框与网格中当前“选定”的行相对应。这样网格中的每一列都会有一个文本框。最初,您确实知道数据可能包含多少列。因此,您需要在面板中动态创建文本框。
一种将每个文本框“绑定”到网格中当前选定行的列的方法可以通过将每个文本框“绑定”到 DataTable
中用作 DataSource
到网格。每个文本框都有一个名为...DataBindings
的属性。 属性 将允许您将文本框“绑定”到 DataTable
中的特定列。下面是一个例子。
为了提供帮助,鉴于我们有数据,我建议使用一种方法 AddTextBoxesToPanel(DataTable dt)
......它采用 DataTable
并循环遍历 table 的列并为每个列创建一个文本框列并将该列的“绑定”添加到该文本框。使用这种方法,当用户选择不同的行时,不需要额外的代码来填充文本框。
private void AddTextBoxesToPanel(DataTable dt) {
panel1.Controls.Clear();
panel1.AutoScroll = true;
panel1.AutoScrollMinSize = new Size(0, (dt.Columns.Count * 23) + 15);
TextBox curTB;
int y = 10;
foreach (DataColumn col in dt.Columns) {
curTB = GetTextBox(10, y);
curTB.DataBindings.Add(new Binding("Text", dt, col.ColumnName));
panel1.Controls.Add(curTB);
y += 23;
}
}
以上,我们假设这可能被调用不止一次,并且需要“清除”面板中之前的所有文本框。将面板设置为可滚动,然后开始遍历列以将文本框添加到面板。 GetTextBox
方法(如下)简单地获取具有所需位置的新 TextBox
。最后,我们将“that”文本框的 DataBinding
设置为指向“that”列。 curTB.DataBindings.Add(new Binding("Text", dt, col.ColumnName));
private TextBox GetTextBox(int xLoc, int yLoc) {
TextBox TB = new TextBox {
Text = "",
Location = new Point(xLoc, yLoc),
Size = new Size(150, 50),
Margin = new Padding(10),
Anchor = AnchorStyles.Left
};
return TB;
}
下面是使用上述方法的完整示例。 Forms Load
方法用 10 列和 20 行填充 DataTable
,然后将该 DataTable
用作网格的 DataSource
。然后调用上面的方法将文本框设置到面板中。
private void Form1_Load(object sender, EventArgs e) {
FillGrid(10, 20);
AddTextBoxesToPanel((DataTable)dataGridView1.DataSource);
}
一种生成测试数据的方法。
private void FillGrid(int totalColumns, int totRows) {
DataTable dt = new DataTable();
// add columns
for (int i = 0; i < totalColumns; i++) {
dt.Columns.Add("Col" + i, typeof(string));
}
// add rows
object[] data = new object[totalColumns];
for (int row = 0; row < totRows; row++) {
for (int col = 0; col < totalColumns; col++) {
data[col] = "Col" + col + "Row" + row;
}
dt.Rows.Add(data);
}
dataGridView1.DataSource = dt;
}
希望对您有所帮助。
//...
{
public Form1()
{
InitializeComponent();
LoadData();
textBoxFill();
}
private void LoadData()
{
SqlConnection SCConnect = new SqlConnection("Server=localhost;Initial Catalog=T8;Integrated Security=SSPI;");
SCConnect.Open();
StringBuilder SBBuilder = new StringBuilder("Select * from Table8");
SqlDataAdapter SDA = new SqlDataAdapter(SBBuilder.ToString(), SCConnect);
SqlCommandBuilder SCB = new SqlCommandBuilder(SDA);
DataTable DT = new DataTable();
SDA.Fill(DT);
dataGridView1.DataSource = DT;
}
private void textBoxFill()
{
TextBox TB = new TextBox();
int A = 1;
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
panel1.Controls.Add(TB);
TB.Location = new Point(10, (A * 20));
TB.Top = A * 28;
TB.Size = new Size(200, 50);
TB.Margin = new Padding(10, 10, 10, 10);
}
A = A + 1;
}
}
如何添加多个 TextBox 后跟 DataGridView.Columns.Count 和 每个 TextBox 填充每个 DataGridView 列 data.TQ?
我在查看之前的副本后猜测 post,这可能就是您要查找的内容。如果您解释了整体情况,这可能会对您有所帮助,因为这似乎是一件奇怪的事情,因为数据已经在网格中并且用户可以对其进行编辑,我不确定您为什么要在面板中“复制”此数据.
但是,您似乎确实希望文本框与网格中当前“选定”的行相对应。这样网格中的每一列都会有一个文本框。最初,您确实知道数据可能包含多少列。因此,您需要在面板中动态创建文本框。
一种将每个文本框“绑定”到网格中当前选定行的列的方法可以通过将每个文本框“绑定”到 DataTable
中用作 DataSource
到网格。每个文本框都有一个名为...DataBindings
的属性。 属性 将允许您将文本框“绑定”到 DataTable
中的特定列。下面是一个例子。
为了提供帮助,鉴于我们有数据,我建议使用一种方法 AddTextBoxesToPanel(DataTable dt)
......它采用 DataTable
并循环遍历 table 的列并为每个列创建一个文本框列并将该列的“绑定”添加到该文本框。使用这种方法,当用户选择不同的行时,不需要额外的代码来填充文本框。
private void AddTextBoxesToPanel(DataTable dt) {
panel1.Controls.Clear();
panel1.AutoScroll = true;
panel1.AutoScrollMinSize = new Size(0, (dt.Columns.Count * 23) + 15);
TextBox curTB;
int y = 10;
foreach (DataColumn col in dt.Columns) {
curTB = GetTextBox(10, y);
curTB.DataBindings.Add(new Binding("Text", dt, col.ColumnName));
panel1.Controls.Add(curTB);
y += 23;
}
}
以上,我们假设这可能被调用不止一次,并且需要“清除”面板中之前的所有文本框。将面板设置为可滚动,然后开始遍历列以将文本框添加到面板。 GetTextBox
方法(如下)简单地获取具有所需位置的新 TextBox
。最后,我们将“that”文本框的 DataBinding
设置为指向“that”列。 curTB.DataBindings.Add(new Binding("Text", dt, col.ColumnName));
private TextBox GetTextBox(int xLoc, int yLoc) {
TextBox TB = new TextBox {
Text = "",
Location = new Point(xLoc, yLoc),
Size = new Size(150, 50),
Margin = new Padding(10),
Anchor = AnchorStyles.Left
};
return TB;
}
下面是使用上述方法的完整示例。 Forms Load
方法用 10 列和 20 行填充 DataTable
,然后将该 DataTable
用作网格的 DataSource
。然后调用上面的方法将文本框设置到面板中。
private void Form1_Load(object sender, EventArgs e) {
FillGrid(10, 20);
AddTextBoxesToPanel((DataTable)dataGridView1.DataSource);
}
一种生成测试数据的方法。
private void FillGrid(int totalColumns, int totRows) {
DataTable dt = new DataTable();
// add columns
for (int i = 0; i < totalColumns; i++) {
dt.Columns.Add("Col" + i, typeof(string));
}
// add rows
object[] data = new object[totalColumns];
for (int row = 0; row < totRows; row++) {
for (int col = 0; col < totalColumns; col++) {
data[col] = "Col" + col + "Row" + row;
}
dt.Rows.Add(data);
}
dataGridView1.DataSource = dt;
}
希望对您有所帮助。