如何减小HtmlTableCell的宽度或将HtmlTableRow中的两个控件连接在一起?

时间:2015-06-03 22:21:13

标签: c# html asp.net sharepoint-2010 web-parts

我正在动态创建几个HtmlTableRows并向它们添加单元格,如下所示:

HtmlTable dynamicTable = new HtmlTable();

. . .

// Create row 6
var row6 = new HtmlTableRow();
var cellLitCtrl_6 = new HtmlTableCell();
var cellTxtbx_6 = new HtmlTableCell();
row6.Cells.Add(cellLitCtrl_6);
row6.Cells.Add(cellTxtbx_6);
var mailStopStr = new Label
{
    CssClass = "dplatypus-webform-field-label",
    Text = "Mail Stop:"
};
cellLitCtrl_6.Controls.Add(mailStopStr);

boxMailStop = new TextBox
{
    CssClass = "dplatypus-webform-field-input"
};
cellTxtbx_6.Controls.Add(boxMailStop);
dynamicTable.Rows.Add(row6);

// Create row 7
var row7 = new HtmlTableRow();
var cellCkbx_7 = new HtmlTableCell();
var cellLitCtrl_7 = new HtmlTableCell();
var cellTxtbx_7 = new HtmlTableCell();
row7.Cells.Add(cellCkbx_7);
row7.Cells.Add(cellLitCtrl_7);
row7.Cells.Add(cellTxtbx_7);

CheckBox ckbxEmployeeQ = new CheckBox
{
    CssClass = "dplatypus-webform-field-input",
    ID = "ckbxEmp",
};
ckbxEmployeeQ.Text = "Employee?";
cellCkbx_7.Controls.Add(ckbxEmployeeQ);

var SSNOrITINStr = new Label
{
    CssClass = "dplatypus-webform-field-label",
    Text = "ITIN:",
    ID = "lblSSNOrITIN"
};
cellLitCtrl_7.Controls.Add(SSNOrITINStr);

boxSSNOrITIN = new TextBox
{
    CssClass = "dplatypus-webform-field-input",
    ID = "txtbxSSNOrITIN",
    Width = 80,
    MaxLength = 12
};
cellTxtbx_7.Controls.Add(boxSSNOrITIN);
dynamicTable.Rows.Add(row7);

此代码生成您在此处看到的内容:

enter image description here

但是我希望文本框(黄色文本框)能够贴合其标签(screamshot中的“​​SSN”,但它也可以是“ITIN”,具体取决于“Employee?”复选框的状态。)< / p>

所以我们这里有一个带有两个元素的HtmlTableRow(“Mail Stop:”标签及其“关联”文本框)和另一个带有三个元素的HtmlTableRow(复选框,标签和文本框)。

第二个HtmlTableRow显然是从上面的那个中取出布局线索(将单元格对齐到相同的X坐标值),但为什么呢?我怎么能绕过那个呢?我希望第二行看起来像这样:

|_| Employee?   SSN |___________|

......不喜欢这样:

|_| Employee?   SSN              |___________|

如何“贴合”标签(“SSN”)和以下文本框?

我尝试将标签和文本框放在同一个HtmlTableCell中,但是当我尝试将两个控件添加到单个HtmlTableCell时,它在运行时爆炸。

在大多数情况下,所谓的“独立”HtmlTableRows彼此水平排列很好,但我不知道他们为什么/如何做到这一点,也不知道如何绕过这个通常所需的功能。

2 个答案:

答案 0 :(得分:1)

HtmlTableCell似乎有一个ColSpan属性。您可以尝试在其他行上进行设置,以便按照您希望的方式对其进行格式化:

https://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmltablecell.colspan(v=vs.110).aspx

答案 1 :(得分:0)

这不是我特定问题的答案(我没有找到办法),但这是我最终得到的解决方案:将这些控件添加到页面而不是作为表格的一部分,但是“独立”:

// These elements were not aligning right as row 7 of the section 1 table, so I am just adding them one by one
CheckBox ckbxEmployeeQ = new CheckBox
{
    CssClass = "dplatypus-webform-field-input",
    ID = "ckbxEmp",
};
ckbxEmployeeQ.Text = "Employee?";
this.Controls.Add(ckbxEmployeeQ);

AddVerticalSpace();

var SSNOrITINStr = new Label
{
    CssClass = "dplatypus-webform-field-label",
    Text = "ITIN:",
    ID = "lblSSNOrITIN"
};
SSNOrITINStr.Style.Add("padding", "2px");
this.Controls.Add(SSNOrITINStr);

boxSSNOrITIN = new TextBox
{
    CssClass = "dplatypus-webform-field-input",
    ID = "txtbxSSNOrITIN",
    Width = 80,
    MaxLength = 12
};
this.Controls.Add(boxSSNOrITIN);

AddVerticalSpace();