Comment faire pour actualiser GridView après les données de l'insérer?
J'ai un GridView et lorsque certaines données ont été insérées j'ai appelé le DataBind() la méthode sur le contrôle GridView et l'ObjectDataSource le contrôle GridView est lié, mais la GridView ne pas afficher les nouvelles données. Comment puis-je obtenir pour actualiser?
Voici mon ASP.NET code:
<asp:GridView
ID="grdOrderSignals"
runat="server"
DataSourceID="srcOrderSignals"
DataKeyNames="signal"
EmptyDataText="There are no signals for this order"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="signal" HeaderText="Signal Id" ReadOnly="True" />
<asp:BoundField DataField="description" HeaderText="Description" ReadOnly="True" />
<CustomControls:DeleteButtonField ConfirmText="Delete this order signal?" Text="Del" />
</Columns>
</asp:GridView>
<CustomControls:CustomObjectDataSource
id="srcOrderSignals"
TypeName="DatabaseComponent.DBUtil"
SelectMethod="GetOrderSignals"
DeleteMethod="DeleteOrderSignal"
EnableCaching="false"
runat="server">
<SelectParameters>
<asp:ControlParameter Name="orderId" ControlID="grdOrders" PropertyName="SelectedValue" />
</SelectParameters>
<DeleteParameters>
<asp:ControlParameter Name="orderId" ControlID="grdOrders" PropertyName="SelectedValue" />
<asp:ControlParameter Name="signal" ControlID="grdOrderSignals" PropertyName="SelectedValue" />
</DeleteParameters>
</CustomControls:CustomObjectDataSource>
<asp:Button ID="btnAddOrderSignal" runat="server" Text="Add Order Signal" OnClick="btnAddOrderSignal_Click" />
<asp:DropDownList ID="ddlSignals" runat="server" Visible="false" />
<asp:Button ID="btnInsertOrderSignal" runat="server" Text="Add" Visible="false" OnClick="btnInsertOrderSignal_Click" />
Voici mon code-behind pour gérer les événements click:
protected void btnAddOrderSignal_Click(object sender, EventArgs e)
{
FillSignals();
btnAddOrderSignal.Visible = false;
ddlSignals.Visible = true;
btnInsertOrderSignal.Visible = true;
}
protected void btnInsertOrderSignal_Click(object sender, EventArgs e)
{
InsertOrderSignal();
btnAddOrderSignal.Visible = true;
ddlSignals.Visible = false;
btnInsertOrderSignal.Visible = false;
srcOrderSignals.DataBind();
grdOrderSignals.DataBind();
}
protected void InsertOrderSignal()
{
DBUtil DB = new DBUtil();
int orderId = (int)grdOrders.SelectedValue;
string signalId = ddlSignals.SelectedValue;
DB.InsertOrderSignal(orderId, signalId);
}
protected void FillSignals()
{
DBUtil DB = new DBUtil();
DataTable od = DB.GetOrderDetails((int)grdOrders.SelectedValue);
int strategyId = (int)od.Rows[0]["strategyId"];
ddlSignals.DataSource = DB.GetSignals(strategyId);
ddlSignals.DataTextField = "signalId";
ddlSignals.DataValueField = "signalId";
ddlSignals.DataBind();
}
Dois-je appeler DataBind() sur les deux objets? Qu'ai-je fait de mal?
Merci!
OriginalL'auteur Mark Allison | 2010-11-09
Vous devez vous connecter pour publier un commentaire.
Dans votre méthode btnInsertOrderSignal_Click vous ajoutez un nouvel élément de liaison de données à nouveau. C'est exact, mais vous n'êtes pas la mise à jour de votre source de données avant de liaison de données(). Cela signifie qu'il va se lier à l'origine de la source de données.
Il semble que ce qui remplit votre CustomControl doit être appelé de nouveau. GetOrderSignals()?
Fait - j'ai appelé la méthode Select() sur la source de données et cela fonctionne maintenant. Merci pour regarder.
Grand. La méthode de sélection est la méthode qui met à jour la source de données par "faire le sélectionner à nouveau". Je comprends qu'un simple databind ne vais pas appeler le SelectMethod de nouveau.
OriginalL'auteur Kamal