asp:table在回发时丢失数据

时间:2016-05-31 04:30:20

标签: c# asp.net

enter image description here

我在我的项目中使用asp:table。我在表中动态添加行。

第一个标题行插入页面加载事件中。

标题行有一些复选框。选中任何复选框后,会在$('input:checkbox:not(:disabled)').removeAttr('checked'); 事件中插入新行。

这个新行有一个动态创建的文本框,我在其中从用户那里获取一些输入。

在给出输入后,用户必须单击在数据库中插入数据的checkedChange()按钮。

Add Data事件中创建的行会在OnCheckedChanged发生任何事件时被删除。

我尝试过EnableViewState,但它仍无效。

我该如何解决这个问题?

这是我的aspx代码:

postback

以下是CheckedChangedEvent的.cs代码:

<asp:Table ID="tbl_fundtype" runat="server" CssClass="table-bordered tblfund" style="width:50%; white-space:nowrap;" EnableViewState="true">
                        </asp:Table>

这里我试图通过点击按钮获取已检查更改事件中Created Rows的值。

public void Chk_Fund_CheckedChange(object sender, EventArgs e)
    {
        TableRow tr = new TableRow();
        for (int i = 0; i < tbl_fundtype.Rows[0].Cells.Count; i++)
        {
            string DynamicChkID = "fund_" + dt_fundtype.Rows[i]["fund_type_cd"].ToString();
            CheckBox chk = new CheckBox();
            chk = (CheckBox)tbl_fundtype.Rows[0].Cells[i].FindControl(DynamicChkID);
            TableCell td = new TableCell();
            if (chk.Checked == true)
            {
                TextBox txt = new TextBox();
                txt.ID = "txt_" + dt_fundtype.Rows[i]["fund_type_cd"].ToString();
                txt.Attributes.Add("Placeholder","Enter Share Percent...");
                td.Controls.Add(txt);
            }
            else
            {
                td.Text = "     ";
            }
            tr.Cells.Add(td);
        }
        tbl_fundtype.Rows.Add(tr);
        hfTab.Value = "fund";
        collapsestate = "expand";
    }

这是在页面加载事件中插入标题行:

public bool ValidateAddNominee()
    {
        if (txt_nomineename.Text == "")
        {
            lbl_nomineeErr.Text = "Please Enter Nominee Name";
            return false;
        }
        else if (txt_nomineecnic.Text == "")
        {
            lbl_nomineeErr.Text = "Please Enter Nominee CNIC";
            return false;
        }
        //Count if any of the nominee is selected
        int countShares = 0;
        for (int i = 0; i < tbl_fundtype.Rows[0].Cells.Count; i++)
        {
            string DynamicChkID = "fund_" + dt_fundtype.Rows[i]["fund_type_cd"].ToString();
            CheckBox chk = new CheckBox();
            chk = (CheckBox)tbl_fundtype.Rows[0].Cells[i].FindControl(DynamicChkID);
            if (chk.Checked == true)
            {
                countShares++;
                TextBox txt = new TextBox();
                string DynamicTxtID = "txt_" + dt_fundtype.Rows[i]["fund_type_cd"].ToString();
                int chek = tbl_fundtype.Rows.Count;
                txt = (TextBox)tbl_fundtype.Rows[1].Cells[i].FindControl(DynamicTxtID);
                if (txt.Text=="")
                {
                    lbl_nomineeErr.Text = "Please Enter Share Percent for "+ dt_fundtype.Rows[i]["fund_type"].ToString();
                    return false;
                }
            }           
        }
        if (countShares == 0)
        {
            lbl_nomineeErr.Text = "Please Select any Fund Type";
            return false;
        }
        else if (!file_nominee.HasFile)
        {
            lbl_nomineeErr.Text = "Please attach Nominee CNIC";
            return false;
        }
        else
        {
            return true;
        }




    }

它显示我的行数是1但它应该是两个,第一个是标题行,另一个应该是在已检查的已更改事件中创建的行。

3 个答案:

答案 0 :(得分:0)

您需要在aspx页面中添加更新面板 -

new Select(driver.findElement(By.id("seats"))).selectByValue("4");

答案 1 :(得分:0)

对于Web方法,下面是Javascript代码

<script type="text/javascript">
    //function to convert HTML table to jagged array//
    var HTMLtbl =
        {
            getData: function (table) {
                var data = [];
                table.find('tr').not(':first').each(function (rowIndex, r) {
                    var cols = [];
                    $(this).find('td').each(function (colIndex, c) {

                        if ($(this).children(':text,:hidden,textarea,select').length > 0)    //text//hidden//textarea//select
                            cols.push($(this).children('input,textarea,select').val());

                            // if dropdown text is needed then uncomment it and remove SELECT from above IF condition// 
                            // else if ($(this).children('select').length > 0)
                            // cols.push($(this).find('option:selected').text());

                        else if ($(this).children(':checkbox').length > 0)                    // checkbox
                            cols.push($(this).children(':checkbox').is(':checked') ? 1 : 0);  //or true false
                        else if ($(this).children(':input').length > 0)
                            cols.push($(this).children(':input').val());
                        else
                            cols.push($(this).text().trim());                                // get td Value
                    });
                    data.push(cols);
                });
                return data;
            }
        }

    // event to fire on Save button click //
    $(document).on('click', '#btnSave', function () { //Change '#btnSave' to '#AddButtonId'
        var data = HTMLtbl.getData($('#tbl_fundtype'));  // passing that table's ID //                        
        var parameters = {};
        parameters.array = data;
        var request = $.ajax({
            async: true,
            cache: false,
            dataType: "json",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "prescribe.aspx/SaveData", //Change "prescribe.aspx" to your page name.
            data: JSON.stringify(parameters),                
        });
    });
</script>
代码中的

[VB中的代码,将它们转换为C#] -

<WebMethod> _
Public Shared Sub SaveData(array As String()())

'Now Save the data from array [loop through the array]
     Dim s_Result as String
     s_Result=array(0)(0).ToString

End Sub

答案 2 :(得分:0)

尝试将表保存到会话中,然后在回发期间加载它,它对我有效:)

protected void Page_Init(object sender, EventArgs e)
        {
                if (!IsPostBack)
                {
                    Session["tbl_fundtype"] = tbl_fundtype;
                }
                tbl_fundtype = (Table)Session["tbl_fundtype"];
        }