Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# html表绑定问题_C#_Asp.net_Html Table - Fatal编程技术网

C# html表绑定问题

C# html表绑定问题,c#,asp.net,html-table,C#,Asp.net,Html Table,我有一个带有以下代码的函数,可以动态绑定一个表。我在页面加载中调用此函数。调用此方法后,表包含三列:复选框、标签和文本框 我还有一个按钮控制。单击此按钮时,我正在检查表中的复选框,然后将数据插入对应于复选框的数据库中 问题在于,当单击按钮时,它没有存储复选框的选中状态,因为按钮单击也会调用页面加载,页面加载会调用下面的函数,因此会重新创建表中的所有元素 我无法在此使用Page.IsPostBack,因为单击按钮时应加载表格。如果我在If(!Page.IsPostBack)中写入以下代码,则单击按

我有一个带有以下代码的函数,可以动态绑定一个表。我在页面加载中调用此函数。调用此方法后,表包含三列:复选框、标签和文本框

我还有一个按钮控制。单击此按钮时,我正在检查表中的复选框,然后将数据插入对应于复选框的数据库中

问题在于,当单击按钮时,它没有存储复选框的选中状态,因为按钮单击也会调用页面加载,页面加载会调用下面的函数,因此会重新创建表中的所有元素

我无法在此使用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问题是在更改下拉列表中的值并单击按钮后,下拉列表中选择的索引在函数中更改为默认值。即使删除该块,结果也是相同的