2010-11-09 47 views
3

我有一個GridView,並且當插入一些數據時,我已經調用GridView上的DataBind()方法和GridView綁定的ObjectDataSource,但GridView不顯示新數據。我如何獲得它刷新?如何在數據插入後刷新GridView?

這裏是我的ASP.NET代碼:

<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" /> 

這裏是我的代碼隱藏處理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();  
} 

我需要在這兩個對象調用DataBind()?我在這裏做錯了什麼?

謝謝!

回答

6

在你的方法btnInsertOrderSignal_Click你添加一個新的項目和數據綁定了。這是正確的,但是在databinding()之前你沒有更新你的數據源。這意味着它將綁定到原始數​​據源。

看起來什麼填充你的CustomControl需要再次調用。 GetOrderSignals()?

+0

謝謝,但我想我是用srcOrderSignals.DataBind()來做到這一點?您是否有其他方法來更新數據源? – 2010-11-09 09:32:04

+0

解決了它 - 我在DataSource上調用了Select()方法,它現在可以工作。感謝您的期待。 – 2010-11-09 09:36:24

+0

太好了。 select方法是通過'再次選擇'來更新數據源的方法。據我所知,一個簡單的數據綁定不會再次調用SelectMethod。 – Kamal 2010-11-09 09:42:11