2010-11-09 37 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