【问题标题】:How to refresh GridView after data insert?数据插入后如何刷新GridView?
【发布时间】:2010-11-09 09:20:52
【问题描述】:

我有一个 GridView,当插入一些数据时,我在 GridView 和 GridView 绑定到的 ObjectDataSource 上调用了 DataBind() 方法,但 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" />

这是我处理点击事件的代码:

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() 吗?我在这里做错了什么?

谢谢!

【问题讨论】:

    标签: c# asp.net data-binding gridview c#-4.0


    【解决方案1】:

    在您的方法 btnInsertOrderSignal_Click 中,您正在添加一个新项目并再次进行数据绑定。这是正确的,但您没有在 databinding() 之前更新数据源。这意味着它将绑定到原始数​​据源。

    似乎需要再次调用填充您的 CustomControl 的内容。 GetOrderSignals()?

    【讨论】:

    • 谢谢,但我以为我是用 srcOrderSignals.DataBind() 做的?您是否有其他方法来更新数据源?
    • 解决了 - 我在 DataSource 上调用了 Select() 方法,它现在可以工作了。感谢收看。
    • 太棒了。 select 方法是通过“再次选择”来更新数据源的方法。据我了解,一个简单的数据绑定不会再次调用 SelectMethod。
    猜你喜欢
    • 2020-01-03
    • 2016-10-16
    • 1970-01-01
    • 2015-02-02
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多