【发布时间】:2017-03-02 19:58:26
【问题描述】:
我有一个从参考表中提取数据的中继器。中继器上有一个按钮,应该添加一行。该按钮可以很好地添加行,但是,当我在转发器内的新文本框中输入数据并再次单击添加行按钮时,输入到先前添加的行中的数据会消失。我需要该数据保留在那些行中由按钮添加,不知所措:
页面加载代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Session["dt2"] = null;
}
else
{
if (Session["dt2"] == null)
{
SqlDataAdapter sda2 = new SqlDataAdapter("select i.reference_id as [Ref ID], r.ref_code as [Ref Code], r.title as Title, r.year as Year, i.pages as [Pages] from item_reference i left join [references] r on r.reference_id = i.reference_id left join item_header h on h.item_header_id = i.item_header_id where h.item_id ='" + cloneItemID.Text + "'", con);
dt2 = new DataSet();
sda2.Fill(dt2);
Session["dt2"] = dt2;
}
}
RptRefs.DataSource = (DataSet)Session["dt2"];
RptRefs.DataBind();
}
按钮点击代码:
protected void btnRefAddRow_Click(object sender, EventArgs e)
{
var dt2Data = (DataSet)Session["dt2"];
for (var i =0; i < RptRefs.Items.Count; i++)
{
dt2Data.Tables[0].Rows[i]["Ref ID"] = (RptRefs.Items[i].FindControl("refID") as TextBox).Text;
dt2Data.Tables[0].Rows[i]["Pages"] = (RptRefs.Items[i].FindControl("Pages") as TextBox).Text;
}
var row = dt2Data.Tables[0].NewRow();
row["Ref ID"] = "0";
row["Ref Code"] = "";
row["Title"] = "";
row["Pages"] = "";
dt2Data.Tables[0].Rows.Add(row);
Session["dt2"] = dt2Data;
RptRefs.DataSource = dt2Data;
RptRefs.DataBind();
}
【问题讨论】:
-
您是否确认您的插入代码可以正常工作并插入您认为的功能?一个好的测试是在第一次绑定之前将插入代码移动到带有一些测试值的 page_load。
-
此添加行不应将数据插入数据库。我有一个处理插入的保存按钮,如果这就是你要问的。数据只需要在添加的行被修改并再次点击添加行后保留在转发器中。