当我尝试向现有网格添加新行时,我的值将被清除。使用Viewstate我将数据表维护在页面上并将其绑定到网格。认为在回发期间值已被清除。
// AddNewRow
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
int i;
if (dtCurrentTable.Rows.Count > 0)
{
for (i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
TextBox txtguide = (TextBox)grdreports.Rows[rowIndex].FindControl("txtAccNo");
drCurrentRow = dtCurrentTable.NewRow();
dtCurrentTable.Rows[i - 1]["txtAccNo"] = txtguide.Text;
rowIndex += 1;
}
drCurrentRow = dtCurrentTable.NewRow();
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
ViewState["rowcount"] = dtCurrentTable.Rows.Count;
grdreports.DataSource = dtCurrentTable;
grdreports.DataBind();
}
}
// aspx页面:
<asp:GridView ID="grdreports" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
S.No</HeaderTemplate>
<ItemTemplate>
<%#Container.DataItemIndex+1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Acc.No/Tel.No">
<ItemTemplate>
<asp:TextBox ID="txtAccNo" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "nvrGuide")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="AddNew" ShowHeader="false">
<ItemTemplate>
<asp:LinkButton ID="lbtnAddGuide" runat="server" CommandName="Add" Text="Add New"
OnClick="lbtnAddGuide_OnClick"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete" ShowHeader="false">
<ItemTemplate>
<asp:LinkButton ID="lbtnDeleteGuide" runat="server" CommandName="Delete" Text="Delete"
OnClick="lbtnDeleteGuide_OnClick"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我哪里错了?
答案 0 :(得分:1)
我的猜测是,名字不同。
这意味着, 名称
`Text='<%#DataBinder.Eval(Container.DataItem, "nvrGuide")%>'`
.aspx页面中指定的是“nvrguide”,但.cs页面中的名称
TextBox txtguide = (TextBox)grdreports.Rows[rowIndex].FindControl("txtAccNo");
是“txtAccNo”。所以我认为你在.cs页面中作为空网格绑定的值与.aspx页面不同。
请在两个页面中将其更改为相同。
可能它应该为此抛出错误。由于代码没有完全显示,我不能tel。
答案 1 :(得分:0)
对于页面回发,请在页面加载事件
上使用以下代码protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
foreach (GridViewRow row in GridView1.Rows)
{
((TextBox)row.FindControl("txtAccNo")).Text = Request.Form[((TextBox)row.FindControl("txtAccNo")).UniqueID];
}
}
}