【发布时间】:2017-11-10 20:53:29
【问题描述】:
寻找一种从数据列表中动态删除行的方法,为用户提供一种“清理”其输入界面的方法。 asp datalist 从 SQL 加载,然后用户在将表发送到另一个数据库之前对其进行操作。
通过使用数据表会话变量,我有一个正常运行的“addRows”,向其中添加行然后重新绑定到数据列表,但是我似乎无法通过删除行获得相同的功能。
目前的逻辑是使用datalist'delRows'命令,从asp datalist中获取当前输入或修改的数据,分配给datatable,循环遍历datatable,删除某些字段为空的行,然后重新绑定datatable到 asp 数据列表。
当前代码检查,但无法填充 dt,错误“dt = null”:
if (e.CommandName == "delRows")
{
DataList DataList1 = (DataList)FindControl("DataList1"); //find datalist in current state
Session["dataList1"] = DataList1; //assign datalist to session variable
DataTable dt = Session["dataList1"] as DataTable; //populate datatable with datalist session
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
DataRow dr = dt.Rows[i];
string check = dr["item_no"].ToString();
if (check == String.Empty)
{
dr.Delete();
}
}
DataList1.DataSource = dt;
DataList1.DataBind();
}
希望有更好的方法来实现这一点!更别提工作了......
【问题讨论】:
-
您在哪里将数据绑定到 DataList。为什么不直接使用 DataTable 来检索数据..?
-
你在哪里给这个变量赋值..?
Session["dataList1"] = DataList1;向后看 -
Session["dataList1"] 被绑定在 addRow 命令中。我相信我遇到的问题是如何获取当前的数据列表状态,这意味着用户可以修改它,但是我需要获取“当前状态”并循环遍历它。我在想将它抓取到一个会话变量,然后将它连接到一个数据表(dt),然后循环通过表。会话[“dataList1”] = DataList1;将从上一行中获取找到的 datalist 控件,然后将其分配给会话变量。
-
数据被捕获到会话变量的位置是我将会话转换为数据表的位置,您可能必须提出自己的执行增量检查的机制,以确保数据是最新的或数据已更改。我会先从最简单的部分开始,并确保您可以成功地将数据存储到会话中,会话变量没有 OnChange 事件。所以您可能还需要重新考虑您的当前进程
标签: c# asp.net datatable datalist