C# html表绑定问题
我有一个带有以下代码的函数,可以动态绑定一个表。我在页面加载中调用此函数。调用此方法后,表包含三列:复选框、标签和文本框 我还有一个按钮控制。单击此按钮时,我正在检查表中的复选框,然后将数据插入对应于复选框的数据库中 问题在于,当单击按钮时,它没有存储复选框的选中状态,因为按钮单击也会调用页面加载,页面加载会调用下面的函数,因此会重新创建表中的所有元素 我无法在此使用Page.IsPostBack,因为单击按钮时应加载表格。如果我在If(!Page.IsPostBack)中写入以下代码,则单击按钮时,它在表中找不到任何行C# html表绑定问题,c#,asp.net,html-table,C#,Asp.net,Html Table,我有一个带有以下代码的函数,可以动态绑定一个表。我在页面加载中调用此函数。调用此方法后,表包含三列:复选框、标签和文本框 我还有一个按钮控制。单击此按钮时,我正在检查表中的复选框,然后将数据插入对应于复选框的数据库中 问题在于,当单击按钮时,它没有存储复选框的选中状态,因为按钮单击也会调用页面加载,页面加载会调用下面的函数,因此会重新创建表中的所有元素 我无法在此使用Page.IsPostBack,因为单击按钮时应加载表格。如果我在If(!Page.IsPostBack)中写入以下代码,则单击按
try
{
ManageVIN objMngVin = new ManageVIN();
DataTable tblVins = objMngVin.MyFunction(clientCode);
if (tblAssociateFleet.Rows.Count > 1)
{
for (int i = 1; i <= tblAssociateFleet.Rows.Count - 1; i++)
{
tblAssociateFleet.Rows[i].Cells.Clear();
}
}
if (tblVins != null && tblVins.Rows.Count > 0)
{
foreach (DataRow dr in tblVins.Rows)
{
HtmlTableRow tblRow = new HtmlTableRow();
tblRow.Attributes.Add("class", "tblrow");
HtmlTableCell tblCell1 = new HtmlTableCell();
CheckBox chk = new CheckBox();
chk.CssClass = "selctChk";
if (!Page.IsPostBack)
{
chk.Checked = false;
}
tblCell1.Controls.Add(chk);
HtmlTableCell tableCelll2 = new HtmlTableCell();
Label lblVinVlaue = new Label();
lblVinVlaue.Text = Convert.ToString(dr["VIN"]);
tableCelll2.Controls.Add(lblVinVlaue);
HtmlTableCell tableCell3 = new HtmlTableCell();
TextBox txtVinVal = new TextBox();
txtVinVal.CssClass = "textEntry";
tableCell3.Controls.Add(txtVinVal);
tblRow.Cells.Add(tblCell1);
tblRow.Cells.Add(tableCelll2);
tblRow.Cells.Add(tableCell3);
tblAssociateFleet.Rows.Add(tblRow);
}
}
}
试试看
{
ManageVIN objMngVin=新ManageVIN();
DataTable tblVins=objMngVin.MyFunction(clientCode);
如果(tblAssociateFleet.Rows.Count>1)
{
对于(int i=1;i 0)
{
foreach(tblVins.Rows中的数据行dr)
{
HtmlTableRow tblRow=新的HtmlTableRow();
添加(“类”,“tblRow”);
HtmlTableCell tblCell1=新的HtmlTableCell();
复选框chk=新复选框();
chk.CssClass=“selctChk”;
如果(!Page.IsPostBack)
{
chk.Checked=假;
}
tblCell1.控件.添加(chk);
HtmlTableCell tableCelll2=新的HtmlTableCell();
Label lblVinVlaue=新标签();
lblVinVlaue.Text=Convert.ToString(dr[“VIN”]);
TableCell2.Controls.Add(lblVinVlaue);
HtmlTableCell tableCell3=新的HtmlTableCell();
TextBox txtVinVal=new TextBox();
txtVinVal.CssClass=“textEntry”;
tableCell3.Controls.Add(txtVinVal);
tblRow.Cells.Add(tblCell1);
tblRow.Cells.Add(tableCelll2);
tblRow.Cells.Add(表CELL3);
tblasssociatefleet.Rows.Add(tblRow);
}
}
}
如何处理此问题?您应该在Init或PreInit生命周期中执行此操作。根据MS,PreInit是执行此操作的首选位置。如果加载有点太晚(特别是缺少处理复选框单击的回发数据的IPostBackDataHandler.LoadPostData)
同样,这也是相似的。听起来你的做法非常接近正确 但是,我发现了一个问题。您有一个块,其中说明:
if (!Page.IsPostBack)
{
chk.Checked = false;
}
完全删除该块。问题是,在回发时asp.net实际上会呈现页面两次。在第一次呈现时,该行将取消复选框的状态
我知道Hexxagonal说过要在生命周期的init或preinit部分执行此操作,但是,我们有很多页面可以动态生成控件。对于那些页面,我们总是在page_load中处理生成操作,它工作得很好。在从preinit调用函数时,它第一次工作得很好,但现在我在SelectedIn上也有一个下拉菜单我调用的是同一个函数的xChange问题是在更改下拉列表中的值并单击按钮后,下拉列表中选择的索引在函数中更改为默认值。即使删除该块,结果也是相同的