我有一個gridview運行rowcommand來更新數據庫中的值。一切正常,但運行更新後,gridview不會刷新表的最新值。我已經看到了很多解決方案來解決這個問題,他們大多隻是簡單地說,「只是重新綁定gridview」使用datasourceid刷新gridview獲取更新後的最新值
我試過運行gridview的綁定,但是這並沒有什麼能夠刷新gridview。
我還試圖重新分配數據源到第一創造一個像這樣的表時使用的ObjectDataSource控件:
GridViewHolder.DataSource = MachineDataSet;
GridViewHolder.DataBind();
然而,我最終得到一個錯誤說:這兩個數據源和DataSourceID的聲明和刪除一個定義。
如果有人能告訴我我的gridview出錯了,我將不勝感激。
下面你會發現我的gridview和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>
任何幫助或建議,不勝感激。
感謝
「但是,我最終得到一個錯誤:數據源和datasourceid都被聲明並刪除了一個定義。」從我記得你必須使用其中一個或另一個。在你的代碼後面,你可能能夠逃脫只是做一個.Databind()調用 – user1231231412
@jonc我試着做一個.databind()調用以及不拋出錯誤,但它不會刷新後的gridview更新。 – James213
你可以發佈你的DataSource定義代碼嗎?對於MachineDataSet – user1231231412