Как обновить GridView после вставки данных? - PullRequest
3 голосов
/ 09 ноября 2010

У меня есть 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" />

Вот мой код для обработки событий щелчка:

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 () для обоих объектов?Что я тут не так сделал?

Спасибо!

1 Ответ

6 голосов
/ 09 ноября 2010

В вашем методе btnInsertOrderSignal_Click вы добавляете новый элемент и снова привязываете данные.Это правильно, но вы не обновляете свой источник данных перед привязкой данных ().Это означает, что он будет привязан к исходному источнику данных.

Кажется, что то, что заполняет ваш CustomControl, нужно вызывать снова.GetOrderSignals ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...