[英]Add Row Dynamically in TableLayoutPanel
我想在 c# 中的 Windows 窗體的 TableLayoutPanel 中逐行動態添加這些條目
我怎樣才能做到這一點?
試試下面的代碼,
// TableLayoutPanel Initialization
TableLayoutPanel panel = new TableLayoutPanel();
panel.ColumnCount = 3;
panel.RowCount = 1;
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
panel.Controls.Add(new Label() { Text = "Address" }, 1, 0);
panel.Controls.Add(new Label() { Text = "Contact No" }, 2, 0);
panel.Controls.Add(new Label() { Text = "Email ID" }, 3, 0);
// For Add New Row (Loop this code for add multiple rows)
panel.RowCount = panel.RowCount + 1;
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
panel.Controls.Add(new Label() { Text = "Street, City, State" }, 1, panel.RowCount-1);
panel.Controls.Add(new Label() { Text = "888888888888" }, 2, panel.RowCount-1);
panel.Controls.Add(new Label() { Text = "xxxxxxx@gmail.com" }, 3, panel.RowCount-1);
我知道這個問題很老了,但有人會發現以下內容很有用:
首先,請注意 petchirajan 的答案很好,但是如果您至少有一個存在的行(例如標題)並且您想使用可視化編輯器設置的高度繼續列表,而無需修改代碼,您可以使用這個:
private void AddItem(string address, string contactNum, string email )
{
//get a reference to the previous existent
RowStyle temp = panel.RowStyles[panel.RowCount - 1];
//increase panel rows count by one
panel.RowCount++;
//add a new RowStyle as a copy of the previous one
panel.RowStyles.Add(new RowStyle(temp.SizeType, temp.Height));
//add your three controls
panel.Controls.Add(new Label() {Text = address}, 0, panel.RowCount - 1);
panel.Controls.Add(new Label() { Text = contactNum }, 1, panel.RowCount - 1);
panel.Controls.Add(new Label() { Text = email }, 2, panel.RowCount - 1);
}
如果您更喜歡通用表的通用方法:
private void AddRowToPanel(TableLayoutPanel panel, string[] rowElements)
{
if (panel.ColumnCount != rowElements.Length)
throw new Exception("Elements number doesn't match!");
//get a reference to the previous existent row
RowStyle temp = panel.RowStyles[panel.RowCount - 1];
//increase panel rows count by one
panel.RowCount++;
//add a new RowStyle as a copy of the previous one
panel.RowStyles.Add(new RowStyle(temp.SizeType, temp.Height));
//add the control
for (int i = 0; i < rowElements.Length; i++)
{
panel.Controls.Add(new Label() { Text = rowElements[i] }, i, panel.RowCount - 1);
}
}
您也可以使用 Collection 而不是數組來執行此操作:
private void AddRowToPanel(TableLayoutPanel panel, IList<string> rowElements)
...
希望這可以幫助。
在 foreach 示例中:
int i=0;
foreach (KeyValuePair<string,string> kv in MyCollection)
{
tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
tableLayoutPanel1.Controls.Add(new Label() { Text = kv.Key }, 0, i);
i++;
}
以下是您可以使用的幾種擴展方法:
您可以通過執行以下操作來調用它們:
TableLayoutPanel tablePanel = new TableLayoutPanel(); //Initialize and do any other construction
tablePanel.AddColumn(null, "Column1");
tablePanel.AddRow(new RowStyle() { SizeType = SizeType.Absolute, Height = 50 }, "RowData1", "RowData2", "RowData3");
public static int AddRow(this TableLayoutPanel table, RowStyle rowStyle = null, params string[] rowData)
{
List<Label> labels = new List<Label>();
rowData.ToList().ForEach(p => labels.Add(new Label() { Text = p }));
return table.AddRow(rowStyle, labels.ToArray());
}
public static int AddRow(this TableLayoutPanel table, RowStyle rowStyle = null, params Control[] rowData)
{
table.RowCount = table.RowCount + 1;
if (rowStyle == null)
rowStyle = new RowStyle(SizeType.AutoSize);
table.RowStyles.Add(rowStyle);
for (int i = 0; i < rowData.Length; i++)
{
if (i > table.ColumnCount - 1)
break;
table.Controls.Add(rowData[i], i, table.RowCount - 1);
}
return table.RowCount - 1;
}
public static int AddColumn(this TableLayoutPanel table, ColumnStyle columnStyle = null, params string[] columnData)
{
List<Label> labels = new List<Label>();
columnData.ToList().ForEach(p => labels.Add(new Label() { Text = p }));
return table.AddColumn(columnStyle, labels.ToArray());
}
public static int AddColumn(this TableLayoutPanel table, ColumnStyle columnStyle = null, params Control[] columnData)
{
table.ColumnCount = table.ColumnCount + 1;
if (columnStyle == null)
columnStyle = new ColumnStyle(SizeType.AutoSize);
table.ColumnStyles.Add(columnStyle);
for (int i = 0; i < columnData.Length; i++)
{
if (i > table.RowCount - 1)
break;
table.Controls.Add(columnData[i], table.ColumnCount - 1, i);
}
return table.ColumnCount - 1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.