刷新gridview以在使用datasourceid时更新后获取最新值

时间:2011-12-08 18:20:23

标签: c# asp.net

我有一个gridview,它运行一个rowcommand来更新数据库中的值。一切正常,除了在运行更新后,gridview不会刷新表的最新值。我已经看到很多解决方案来解决这个问题,他们中的大多数只是简单地说,“只是重新绑定gridview”

我尝试过运行gridview的绑定,但这没有什么可以刷新gridview。

我还尝试将数据源重新分配给首次创建表时使用的objectdatasource:

GridViewHolder.DataSource = MachineDataSet;
GridViewHolder.DataBind();

但是,我最终得到一个错误说:声明了datasource和datasourceid,并删除了一个定义。

如果有人能告诉我我的gridview错误了什么,我会非常感激吗?

下面你会看到我的gridview和rowcomhind for rowcommand。

Gridview:注意:我删除了所有不必要的上下文以便于阅读,如果您需要更多信息,我会抛出gridview的整个代码。

<asp:GridView ID="GridViewHolder" 
                      runat="server" 
                      AllowPaging="True" 
                      AutoGenerateColumns="False"                                                                             
                      EnableViewState="False"
                      DataKeyNames="ID"                          
                      OnRowCommand="GridViewHolder_RowCommand" 
                      DataSourceID="MachineDataSet">
            <RowStyle BackColor="Transparent" 
                      HorizontalAlign="Center" />
            <Columns>                    
                <asp:ButtonField ButtonType="Button" Text="Assign New Values" 
                                 CommandName="AssignNewValue" ItemStyle-Wrap="true"
                                 ItemStyle-Width="25px">
                    <ItemStyle Width="25px" Wrap="True" />
                </asp:ButtonField>
            </Columns>
     </asp:GridView>

代码隐藏:

/// <summary>
    /// Handles the rowcommand event button
    /// </summary>
    /// <param name="sender">The source control event</param>
    /// <param name="e">The <see cref="System.Web.UI.WebControls.GridViewCommandEventArgs"/> instance containing the even data.</param>
    protected void GridViewHolder_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        logger.Debug("Entering Row Command");
        if (e.CommandName.CompareTo("AssignNewValue") == 0)
        {
            try
            {

                logger.Debug("Entering AssignNewValue Command");
                int index = Convert.ToInt32(e.CommandArgument);
                GridView gv = (GridView)Panel1.FindControl("GridViewHolder");
                GridViewRow row = gv.Rows[index];
                Label machineID = (Label)row.FindControl("MachineIDLabel");
                int machineid = Convert.ToInt32(machineID.Text);
                string machinetypeid = MachineTypeComboBox.SelectedValue;
                string machinemodelid = MachineModelComboBox.SelectedValue;
                try
                {
                    if (machinetypeid != "" || machinemodelid != "")
                    {
                        if (machinetypeid != "")
                        {
                            inputsService.UpdateMachineTypes(machineid, machinetypeid);
                        }
                        if (machinemodelid != "")
                        {
                            inputsService.UpdateMachineModels(machineid, machinemodelid);
                        }

                        UpdateSucceed.Visible = true;
                        logger.Debug("AssignNewValue - Database successfully updated!");
                    }
                    else
                    {
                        UpdateFail.Visible = true;
                        logger.Debug("AssignNewValue - Database had no data selected to be updated.");
                    }                        
                }
                catch (Exception ex)
                {
                    logger.ErrorFormat("AssignNewValue - Failed to update the table, ex = {0}", ex);
                }

            }
            catch (Exception ex)
            {
                logger.ErrorFormat("AssignNewValue Failed to complete, {0}", ex);
            }

            logger.Debug("Leaving AssignNewValue Command");
        }
        logger.Debug("Leaving Row Command");
    }

数据源代码:

<asp:ObjectDataSource ID="MachineDataSet"
                               runat="server" 
                               SelectMethod="GetMachineSiteDetails"                                                          
                               TypeName="Datamart.UI.Reporting.Web.FilteredReportInputsSvc.FilteredReportInputsService" 
                               EnableCaching="True">
             <SelectParameters>
                 <asp:Parameter DefaultValue="" Name="siteid" Type="String" />
             </SelectParameters>
         </asp:ObjectDataSource> 

非常感谢任何帮助或建议。

由于

1 个答案:

答案 0 :(得分:2)

我发现你的代码中有这个:

GridView gv = (GridView)Panel1.FindControl("GridViewHolder")
GridViewHolder.DataSource = MachineDataSet;
GridViewHolder.DataBind();
UpdateSucceed.Visible = true;

应该是:

GridView gv = (GridView)Panel1.FindControl("GridViewHolder")
gv.DataSource = MachineDataSet;
gv.DataBind();
UpdateSucceed.Visible = true;

但是,我会在一个函数中使用它并在page_load事件中调用它,也在row_command上调用它。但是你不应该对gridview的定义有所了解:

 DataSourceID="MachineDataSet">

只有在页面中有DataSource控件时才应使用DataSourceID。

编辑:请记住,如果你从后面的代码绑定gridview,你将不得不在代码中进行一些调整,以便能够在Gridview中进行分页/排序。如果您需要帮助,只需要进行简单的搜索,您就会发现它。 祝你好运!