DBの値を更新するためのrowcommandを実行するgridviewがあります。更新を実行した後、gridviewはテーブルの最新の値で更新されません。私はこの問題を解決するための多くのソリューションを見てきました。それらのほとんどは単に「単にgridviewを再バインドしてください」データソースIDの使用中に最新の値を取得するためにgridviewをリフレッシュする
私はgridviewのバインディングを実行しようとしましたが、グリッドビューをリフレッシュすることはありません。私も最初そうのようなテーブルを作成するときに使用のObjectDataSourceにデータソースを再割り当てしようとした
:
GridViewHolder.DataSource = MachineDataSet;
GridViewHolder.DataBind();
はしかし、私が言ってエラーになってしまった:データソースとdatasourceidの両方が宣言されていることと、 1つの定義を削除します。
誰かが私のグリッドビューで何が間違っているのか教えていただけたら大いに感謝しますか?
以下は、rowcommandのmyviewとcodebehindです。
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>
任意のヘルプや提案が非常に高く評価されています。
GridView gv = (GridView)Panel1.FindControl("GridViewHolder")
GridViewHolder.DataSource = MachineDataSet;
GridViewHolder.DataBind();
UpdateSucceed.Visible = true;
それがあるべきとき::私はあなたのコードでこれを持って見
おかげ
"しかし、私は最終的に次のようなエラーが出ることになります:データソースとデータソースの両方が宣言され、定義を削除するということです。私が思い出すことから、どちらか一方を使用する必要があります。あなたのコードビハインドでは、おそらくちょうど.Databind()コールを行うことで逃げることができます – user1231231412
@jonc私はエラーをスローしない.databind()コールもやってみましたが、後でgridviewをリフレッシュしません更新情報 – James213
DataSource定義コードを投稿できますか?MachineDataSetの場合 – user1231231412