C# ASP.Net gridview与Ajaxtoolkit上载控件一起使用时不刷新

C# ASP.Net gridview与Ajaxtoolkit上载控件一起使用时不刷新,c#,asp.net,ajax,gridview,asyncfileupload,C#,Asp.net,Ajax,Gridview,Asyncfileupload,我有一个asp.net网页,允许手动输入一条记录,或从excel电子表格导入多条记录 在任一进程添加记录后,它们将显示在Gridview控件中(绑定到SQLDataReader)。这允许用户在提交整个数据集进行处理之前编辑或删除记录 我正在使用Ajax工具包AsyncFileUpload控件来处理导入。UploadedComplete c#函数运行正常,记录插入到SQL表中。然后,代码调用my DataBindGrid()函数来刷新网格。我可以一步一步地浏览代码,看到每一行都在执行,然而,它似乎

我有一个asp.net网页,允许手动输入一条记录,或从excel电子表格导入多条记录

在任一进程添加记录后,它们将显示在Gridview控件中(绑定到SQLDataReader)。这允许用户在提交整个数据集进行处理之前编辑或删除记录

我正在使用Ajax工具包AsyncFileUpload控件来处理导入。UploadedComplete c#函数运行正常,记录插入到SQL表中。然后,代码调用my DataBindGrid()函数来刷新网格。我可以一步一步地浏览代码,看到每一行都在执行,然而,它似乎永远不会真正完成,即使一步一步地调试完成了

有两个步骤没有实际完成,网格刷新和向用户指示流程已完成的标签显示

出于测试目的,我添加了一个linkButton,当单击时调用BindDataGrid()。这可以刷新网格并显示状态标签。这不是一个永久性的解决方案,让用户记住刷新太危险了,他们可能会认为他们所有的记录都已经提交了

起初,我认为我的问题是试图在UploadComplete函数中执行更多操作,然后只上载文件(我正在读取上载的Excel文件),因此我破解了代码并添加了一个按钮,供用户单击以启动实际的数据处理。这失败了,因为尽管我可以在UploadComplete函数期间看到文件名被保存到隐藏的表单中,但当我去读取隐藏字段时,数据不再在其中。我没有丢失任何其他隐藏字段中的值

我已经研究了三天了,我真的被卡住了。我假设回发有问题,但目前没有任何线索

这是我的密码:

<%@ Page Title="" Language="C#" MasterPageFile="~/WTIMS.Master" AutoEventWireup="true" CodeBehind="OptionsEntry.aspx.cs" Inherits="WTIMS_OptionsEntry.Pages.OptionsEntry" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <script type="text/javascript" language=javascript>
            function uploadError(sender, args) {
                var errMsg = args.get_errorMessage();
            updateUploadStatus("error", errMsg);    
        }

        function updateUploadStatus(status, message) {
            var uploadStatLabel = document.getElementById('ContentPlaceHolder1_lblError');
            uploadStatLabel.innerText = message;
            if (status == "error") {
                uploadStatLabel.className = "LabelErrorMessage";
            }
            else {
                uploadStatLabel.className = "LabelScucessMessage";
            }
        }

        function startUpload(sender, args) {
            var fileName = args.get_fileName();
            var fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);

            if (fileExt == "xlsx") {
                return true;
            }
            else {
                var err = new Error()
                err.name = "Upload Error";
                err.message = "Only .xlsx files can be uploaded";
                throw (err);
                return false;
            }
        }

        function uploadComplete(sender, args) {
            var rowCount = sender.rowCount;                     
        }
    </script> 
    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    </asp:ToolkitScriptManager>

<table width = 100% cellpadding=1>
        <tr>
            <td colspan=2>
                <asp:Label ID="Label19" runat="server" Text="Upload batch" CssClass=LabelInfo></asp:Label>
            </td>            
        </tr>
        <tr>
            <td width=50%>
            <asp:AsyncFileUpload 
                    ID="AsyncFileUpload1"  
                    Width=400px 
                    ThrobberID=Throbber                    
                    UploaderStyle=Modern
                    CompleteBackColor = "#9BCD9B" 
                    ErrorBackColor="#D44942" 
                    OnClientUploadStarted="startUpload"
                    OnClientUploadError="uploadError"                    
                    OnClientUploadComplete="uploadComplete"
                    OnUploadedComplete=AsyncFileUpload1_UploadedComplete
                    OnUploadedFileError=AsyncFileUpload1_UploadedFileError
                    UploadingBackColor=AliceBlue
                    runat="server" />
                <asp:Label ID="Throbber" runat="server" Text="Label" Style="display:none">
                    <img src="../../images/LoadingWait.gif" alt="loading" />                    
                </asp:Label>                
            </td>                
        </tr>
        <tr>
            <td>
                <asp:LinkButton ID="lkbRefresh" CssClass=linkButton 
                    Text = "Records Upload, Click to View" runat="server" 
                    onclick="lkbRefresh_Click">LinkButton</asp:LinkButton>
            </td>
        </tr>
        <tr>
            <td>
                <asp:Label ID="lblError" runat="server" Text="" CssClass="LabelErrorMessage"></asp:Label>
            </td>
        </tr>
        <tr>
            <td>
                <asp:Label ID="lblStatus" runat="server" Text="" CssClass=LabelFormLabel></asp:Label>
            </td>
        </tr>
        </table>
如有任何建议,将不胜感激

克里斯汀

编辑-GRD选项的代码

protected void grdOptions_RowDataBound(object sender, GridViewRowEventArgs e)
            {
            if (e.Row.RowType == DataControlRowType.DataRow)
                {
                Label lblStatus = (Label)e.Row.Cells[9].Controls[1];
                if (lblStatus.Text == "Invalid")
                    {
                    e.Row.CssClass = "RowError";
                    }
                else
                    {
                    if (e.Row.RowState == DataControlRowState.Alternate)
                        {
                        e.Row.CssClass = "AlternatingRowStyle";
                        }
                    else
                        {
                        e.Row.CssClass = "RowStyle";
                        }

                    }

                }

            }

#region Grid Link Actions
        protected void lkbSave_Click(object sender, EventArgs e)
            {
            this.lblErrorMessage.Visible = false;
            ClearFormColor();
            Boolean blnIsValid = true;  //start off assuming everthing is valid
            //get the row that we are sitting on
            WebControl wc = (WebControl)sender;
            GridViewRow row = (GridViewRow)wc.NamingContainer;


            //get the data we need
            Label lblOptionIDEdit = (Label)row.FindControl("lblOptionIDEdit");
            int intOptionIDEdit = int.Parse(lblOptionIDEdit.Text);

            TextBox txtSymbolEdit = (TextBox)row.FindControl("txtSymbolEdit");
            strSymbol = txtSymbolEdit.Text;
            if(!ValidateSymbol())
                {
                    ToggleTextBoxColor(false,txtSymbolEdit);
                    blnIsValid = false;
                }

            DropDownList ddlPutCallEdit = (DropDownList)row.FindControl("ddlPutCallEdit");
            strCallPut = ddlPutCallEdit.SelectedValue;
            if(!ValidateCallPut())
                {
                    ToggleDropDownColor(false,ddlPutCallEdit);
                    blnIsValid = false;
                }

            DropDownList ddlWtriteBuyEdit = (DropDownList)row.FindControl("ddlWtriteBuyEdit");
            strBuyWrite = ddlWtriteBuyEdit.SelectedValue;
            if(!ValidateBuyWrite())
                {
                    ToggleDropDownColor(false,ddlWtriteBuyEdit);
                    blnIsValid= false;
                }

            TextBox txtPriceEdit = (TextBox)row.FindControl("txtPriceEdit");
            strPrice = txtPriceEdit.Text;
            if(!ValidateStrikePrice())
                {
                    ToggleTextBoxColor(false,txtPriceEdit);
                    blnIsValid= false;
                }


            TextBox txtExpirationDateEdit = (TextBox)row.FindControl("txtExpirationDateEdit");
            strExpirationDate = txtExpirationDateEdit.Text;
            if(!ValidateExpirationDate())
                {
                    ToggleTextBoxColor(false,txtExpirationDateEdit);
                    blnIsValid = false;
                }

            TextBox txtDescriptionEdit = (TextBox)row.FindControl("txtDescriptionEdit");
            strDescription = txtDescriptionEdit.Text;

            if(!blnIsValid)
                {
                    this.lblErrorMessage.Text = "Please corrext the data highlighted in yellow";
                    this.lblErrorMessage.Visible= true;
                return;
                }

            FormatTicker();
            //update the data
            UpdateData.UpdateOptionEntryFormData(intOptionIDEdit, strSymbol, strCallPut, strUnformattedPrice, dtmExpirationDate, strDescription, strBuyWrite, strTicker, "Manual");

            //refresh the grid
            this.grdOptions.EditIndex = -1;
            DataBindGrid();

            }

        protected void lkbEdit_Click(object sender, EventArgs e)
            {
            WebControl wc = (WebControl)sender;
            GridViewRow row = (GridViewRow)wc.NamingContainer;
            int intIndex = row.RowIndex;

            this.grdOptions.EditIndex = intIndex;
            DataBindGrid();
            }           

        protected void lkbDelete_Click(object sender, EventArgs e)
            {
            //get the row that we are sitting on
            WebControl wc = (WebControl)sender;
            GridViewRow row = (GridViewRow)wc.NamingContainer;

            //get the data we need
            Label lblRecordID = (Label)row.FindControl("lblOptionID");
            int intRecordID = int.Parse(lblRecordID.Text);

            //delete the record
            DeleteData.DeleteOption(intRecordID);

            //refresh the grid
            DataBindGrid();
            }

        protected void lkbCancel_Click(object sender, EventArgs e)
    {
        this.grdOptions.EditIndex = -1;
    }


        #endregion

你可以显示“grdOptions”的代码吗。是否在更新面板中?网格或文件上载控件都不在更新面板中。感谢您为grdOptions显示代码?
    protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
                {
                strFileName = Server.MapPath("~/Files/" + this.hdnSessionID.Value + "_uploaded.xlsx");
                string strUploadFileName = AsyncFileUpload1.FileName.ToString();
                InsertData.InsertLogMessage("File to upload: " + strFileName, "OptionsEntry", this.hdnUserID.Value);
                this.hdnUploadFileName.Value = strFileName;
                AsyncFileUpload1.SaveAs(strFileName);
                InsertData.InsertLogMessage("File saved: " + strFileName, "OptionsEntry", this.hdnUserID.Value);
                UploadData(strFileName);
                DataBindGrid();
                }

protected void UploadData(string strUploadFileName)
                {     //process the file that was uploaded
                try
                    {
                    InsertData.InsertLogMessage("Starting Upload", "OptionsEntry", this.hdnUserID.Value);
                    int i = 0;
                    // string strFileName = this.hdnUploadFileName.Value;

                    FileStream myStream = File.Open(strUploadFileName, FileMode.Open, FileAccess.Read);
                    IExcelDataReader myReader = ExcelReaderFactory.CreateOpenXmlReader(myStream);
                    myReader.IsFirstRowAsColumnNames = true;
                    DataSet result = myReader.AsDataSet();

                    foreach (DataTable dt in result.Tables)
                        {

                        foreach (DataRow dr in dt.Rows)
                            {
                            Boolean blnIsValid = true;
                            //code here to loop through file and insert records
                            InsertData.InsertOptionEntryFormData(strSymbol, strCallPut, strUnformattedPrice, dtmExpirationDate, strDescription, strBuyWrite, this.hdnUserID.Value, strTicker, strStatus);

                            i = i + 1;
                            }
                        }
                    this.lblStatus.Text = i + " records have been imported to the pending table.  Please review and correct any errors before submitting.";
                    InsertData.InsertLogMessage( i + " records have been imported", "OptionsEntry", this.hdnUserID.Value);
                    DataBindGrid();
                    }
                catch (Exception ex)
                    {
                    InsertData.InsertLogMessage("An error occured: " + ex.Message, "OptionsEntry", this.hdnUserID.Value);
                    this.lblStatus.Text = "There was a problem importing the data, please check the file and try again.";
                    }    
                }

            protected void DataBindGrid()
                {
                    this.grdOptions.DataSource = GetData.GetOptionEntryFormData(this.hdnUserID.Value);
                    this.grdOptions.DataBind();                
                }
protected void grdOptions_RowDataBound(object sender, GridViewRowEventArgs e)
            {
            if (e.Row.RowType == DataControlRowType.DataRow)
                {
                Label lblStatus = (Label)e.Row.Cells[9].Controls[1];
                if (lblStatus.Text == "Invalid")
                    {
                    e.Row.CssClass = "RowError";
                    }
                else
                    {
                    if (e.Row.RowState == DataControlRowState.Alternate)
                        {
                        e.Row.CssClass = "AlternatingRowStyle";
                        }
                    else
                        {
                        e.Row.CssClass = "RowStyle";
                        }

                    }

                }

            }

#region Grid Link Actions
        protected void lkbSave_Click(object sender, EventArgs e)
            {
            this.lblErrorMessage.Visible = false;
            ClearFormColor();
            Boolean blnIsValid = true;  //start off assuming everthing is valid
            //get the row that we are sitting on
            WebControl wc = (WebControl)sender;
            GridViewRow row = (GridViewRow)wc.NamingContainer;


            //get the data we need
            Label lblOptionIDEdit = (Label)row.FindControl("lblOptionIDEdit");
            int intOptionIDEdit = int.Parse(lblOptionIDEdit.Text);

            TextBox txtSymbolEdit = (TextBox)row.FindControl("txtSymbolEdit");
            strSymbol = txtSymbolEdit.Text;
            if(!ValidateSymbol())
                {
                    ToggleTextBoxColor(false,txtSymbolEdit);
                    blnIsValid = false;
                }

            DropDownList ddlPutCallEdit = (DropDownList)row.FindControl("ddlPutCallEdit");
            strCallPut = ddlPutCallEdit.SelectedValue;
            if(!ValidateCallPut())
                {
                    ToggleDropDownColor(false,ddlPutCallEdit);
                    blnIsValid = false;
                }

            DropDownList ddlWtriteBuyEdit = (DropDownList)row.FindControl("ddlWtriteBuyEdit");
            strBuyWrite = ddlWtriteBuyEdit.SelectedValue;
            if(!ValidateBuyWrite())
                {
                    ToggleDropDownColor(false,ddlWtriteBuyEdit);
                    blnIsValid= false;
                }

            TextBox txtPriceEdit = (TextBox)row.FindControl("txtPriceEdit");
            strPrice = txtPriceEdit.Text;
            if(!ValidateStrikePrice())
                {
                    ToggleTextBoxColor(false,txtPriceEdit);
                    blnIsValid= false;
                }


            TextBox txtExpirationDateEdit = (TextBox)row.FindControl("txtExpirationDateEdit");
            strExpirationDate = txtExpirationDateEdit.Text;
            if(!ValidateExpirationDate())
                {
                    ToggleTextBoxColor(false,txtExpirationDateEdit);
                    blnIsValid = false;
                }

            TextBox txtDescriptionEdit = (TextBox)row.FindControl("txtDescriptionEdit");
            strDescription = txtDescriptionEdit.Text;

            if(!blnIsValid)
                {
                    this.lblErrorMessage.Text = "Please corrext the data highlighted in yellow";
                    this.lblErrorMessage.Visible= true;
                return;
                }

            FormatTicker();
            //update the data
            UpdateData.UpdateOptionEntryFormData(intOptionIDEdit, strSymbol, strCallPut, strUnformattedPrice, dtmExpirationDate, strDescription, strBuyWrite, strTicker, "Manual");

            //refresh the grid
            this.grdOptions.EditIndex = -1;
            DataBindGrid();

            }

        protected void lkbEdit_Click(object sender, EventArgs e)
            {
            WebControl wc = (WebControl)sender;
            GridViewRow row = (GridViewRow)wc.NamingContainer;
            int intIndex = row.RowIndex;

            this.grdOptions.EditIndex = intIndex;
            DataBindGrid();
            }           

        protected void lkbDelete_Click(object sender, EventArgs e)
            {
            //get the row that we are sitting on
            WebControl wc = (WebControl)sender;
            GridViewRow row = (GridViewRow)wc.NamingContainer;

            //get the data we need
            Label lblRecordID = (Label)row.FindControl("lblOptionID");
            int intRecordID = int.Parse(lblRecordID.Text);

            //delete the record
            DeleteData.DeleteOption(intRecordID);

            //refresh the grid
            DataBindGrid();
            }

        protected void lkbCancel_Click(object sender, EventArgs e)
    {
        this.grdOptions.EditIndex = -1;
    }


        #endregion