我有一个ListView,我将在listview中动态添加控件。
这是在数据绑定时调用的函数
private void _DisplayItem(ListViewItem lvi)
{
DataRowView drv = (DataRowView)lvi.DataItem;
HtmlTableCell tdCell = (HtmlTableCell)lvi.FindControl("tdCell");
DataTable dt = (DataTable)Data;
DataRow dr = dt.Select("[Selection Criteria]");
int lineNo = lvi.DisplayIndex + 1;
int idx = 0;
foreach (DataRow d in dr)
{
TextBox txtRemark = new TextBox();
txtRemark.ID = "txtRemark_" + lineNo.ToString() + "_" + idx.ToString();
txtRemark.Text = d["REMARK"].ToString();
idx++;
tdCell.Controls.Add(txtRemark);
}
drv = null;
}
因此,在循环中,我创建了一个TextBox
并为其分配了一些ID。
然后经过一些处理后,我想从这个TextBox中获取值
for (int i = 0; i < lvw.Items.Count; i++)
{
lvdi = lvw.Items[i];
tdCell = (HtmlTableCell)lvdi.FindControl("tdCell");
int index = 0;
if (((CheckBox)lvdi.FindControl("chkItemLine")).Checked)
{
foreach (DataRow drCustInv in drCustInvs)
{
// HERE the assignment to txtRemark returns NULL
txtRemark = (TextBox)tdCell.FindControl("txtRemark_" + (i+1).ToString() + "_" + index.ToString());
dr["REMARK"] = txtRemark.Text;
index++;
}
}
}
代码有什么问题?
答案 0 :(得分:0)
我发现这个问题是由于回发后价值丢失所致。
解决方案是在Page_Load
函数中重新启动动态控件。
if (IsPostBack)
{
ListViewItem lvi;
for (int i = 0; i < lvw.Items.Count; i++)
{
lvi = lvw.Items[i];
HtmlTableCell tdCell = (HtmlTableCell)lvi.FindControl("tdCell");
DataTable dt = (DataTable)Data;
DataRow[] dr = dt.Select("[Selection Criteria]");
int idx = 0;
foreach (DataRow d in dr)
{
TextBox txtRemark = new TextBox();
txtRemark.ID = "txtRemark_" + (i+1).ToString() + "_" + idx.ToString();
idx++;
tdCell.Controls.Add(txtRemark);
}
}
}
此后将使用我从屏幕输入的值自动填充该值。