C# - 无法在Listview中找到项目

时间:2018-04-12 08:00:33

标签: c# listview

我有一个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++;
        }
    }
}

代码有什么问题?

1 个答案:

答案 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);
        }
    }
}

此后将使用我从屏幕输入的值自动填充该值。