DevExpress GridView — запускает оповещение javascript от события onRowInserted

#c# #javascript #asp.net #gridview #devexpress

#c# #javascript #asp.net #gridview #devexpress

Вопрос:

У меня есть DevExpress GridView в asp UpdatePanel.

  <asp:ScriptManager ID="ScriptManager1" runat="server" />
 <asp:UpdatePanel ID="upWWWGrid" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <div>
            <dx:ASPxGridView ID="grdWWW" runat="server" KeyFieldName="WWWID" AutoGenerateColumns="false" Visible="false" OnRowInserting="grdWWW_RowInserting" OnRowInserted="grdWWW_RowInserted">   
                 <Columns>
                    <dx:GridViewCommandColumn VisibleIndex="0" Caption=" ">
                        <ClearFilterButton Visible="True" />
                        <NewButton Visible="true" />
                        <EditButton Visible="true" />
                        <DeleteButton Visible="true" />
                    </dx:GridViewCommandColumn>
                    <dx:GridViewDataColumn FieldName="WWWID" VisibleIndex="1" Caption="WWW ID">
                        <EditFormSettings Visible="False" />
                    </dx:GridViewDataColumn>  
                    <SettingsEditing Mode="EditFormAndDisplayRow" EditFormColumnCount="2" />
                    <SettingsPager PageSize="20" AlwaysShowPager="true" />
                    <SettingsBehavior AllowSort="true" ConfirmDelete="true" />
                    <Settings ShowFilterRow="true" ShowTitlePanel="true" />
                </Columns>
            </dx:ASPxGridView>
        </div>
    </ContentTemplate>
</asp:UpdatePanel>
  

Я хотел бы вызвать оповещение javascript в событии onRowInserted(), выполнив
следующие действия:

 string Message = "Hello World!"; 
ScriptManager.RegisterStartupScript(Page, this.GetType(), "alert", String.Format("alert('{0}');", Message), true);
  

Но, похоже, предупреждение никогда не регистрируется. Я считаю, что проблема связана с тем фактом, что GridView выполняет все, используя обратные вызовы. Есть идеи, как вызвать это оповещение после создания новой записи? Большинство примеров, с которыми я сталкивался, демонстрируют, как это сделать, используя событие SelectionChanged на стороне клиента и onCustomCallback.

Комментарии:

1. разве вставки строк не являются строго серверными? Или это достаточно близко, чтобы какое-то событие было запущено при успешном обратном вызове?

2. Я могу запустить ScriptManager. RegisterStartupScript(…) во время кода события на стороне сервера, но поскольку gridview выполняет обратные вызовы, javascript никогда не запускается. Технически мне нужно окно подтверждения, и на основе ответа пользователя мне нужно выполнить другое действие.

Ответ №1:

Вы можете попробовать что-то вроде этого:

 protected void Grid_RowInsertedEvent(object sender, ASPxDataInsertedEventArgs e) 
{
    JSProperties["cp_RowInserted"] = true;
    ...
}

// I prefer this in grid's Init event handler but you can place it in 
// RowInserted as well
ClientSideEvents.EndCallback = 
    @"function(s,e)
    {
        if(s.cp_RowInserted!=null)
        {
            alert('row inserted');
            s.cp_RowInserted=null;
        }
    };";
  

Комментарии:

1. Я также задал этот вопрос на справочном сайте DevExpress, и они ответили тем же ответом. Для дальнейшего использования вот ссылка на их ответ: devexpress.com/Support/Center/p/Q350078.aspx Спасибо!

Ответ №2:

Вероятно, вы можете зарегистрировать событие onclick для сетки в событии, связанном с данными строки. Вот фрагмент кода, который вы можете использовать

 protected void Grid1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{         
}
else if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onclick", "alert('I am here')");