2011-11-01 52 views
0

我有一個類定義了我將在應用程序範圍內使用的Hierarchical RadGrid。這個網格有很多列,所以這對我來說是最好的實現,因爲我將重寫基於網格的om實現的特定特性。從GridButtonColumn啓動編輯窗體

網格將根據用戶的訪問級別以不同的方式運行。在「基本用戶級別」上,他們將在父網格上添加新項目/編輯項目,並在子網格上編輯,拒絕(刪除),批准(更新)

下一級別將是'批准者'角色。他們不會在父網格上添加新項目/編輯項目,並且只會在子項上具有拒絕(編輯)。用戶在拒絕某個項目時將採取此角色的編輯操作是,他們將被要求通過用戶控件輸入評論,該用戶控件將在點擊拒絕按鈕時啓動。我遇到的問題是,使用GridButtonColumn作爲觸發事件時,不會爲DetailTableView.EditFormSettings顯示自定義用戶控件。有什麼想法嗎? TIA

private void SubmittedBatchesRadGrid_ItemDataBound(object sender, GridItemEventArgs e) 
{ 
    GridDataItem _dataItem = e.Item as GridDataItem; 
    if (_dataItem == null) return; 

    if (e.Item.OwnerTableView.Name == "SubmittedBatchesRadGrid_ChildGrid") 
    { 
     SetChildGridCommandColumns(sender, e); 
     return; 
    } 

    if (_dataItem.KeyValues == "{}") { return; } 

    SetMasterGridCommandColumns(sender, e, _dataItem); 

} 

private static void SetChildGridCommandColumns(object sender, GridItemEventArgs e) 
{ 
    const string _jqueryCode = "if(!$find('{0}').confirm('{1}', event, '{2}'))return false;"; 
    const string _confirmText = "<p>Rejecting this adjustment will mean that you will have to also reject the batch when you are done processing these items.</p><p>Are you sure you want to reject this adjustment?</p>"; 
    ((ImageButton)(((GridEditableItem)e.Item)["PolicyEditRecord"].Controls[0])).ImageUrl = "/controls/styles/images/editpencil.png"; 
    ImageButton _btnReject = (ImageButton)((GridDataItem)e.Item)["DeleteTransaction"].Controls[0]; 

    _btnReject.CommandName = "Update"; 
    _btnReject.ImageUrl = "/controls/styles/images/decline.png"; 
    _btnReject.ToolTip = "Reject this item"; 
    //_btnReject.Attributes["onclick"] = string.Format(_jqueryCode, ((Control)sender).ClientID, _confirmText, "Reject Adjustment"); 
} 

private void SubmittedBatchesRadGrid_DetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e) 
{ 
    e.DetailTableView.EditFormSettings.EditFormType = GridEditFormType.WebUserControl; 
    e.DetailTableView.EditFormSettings.UserControlName = "/Controls/RejectedAdjustmentComment.ascx"; 
    e.DetailTableView.EditMode = GridEditMode.PopUp; 

    e.DetailTableView.CommandItemSettings.ShowAddNewRecordButton = false; 
    GridDataItem _dataItem = e.DetailTableView.ParentItem; 
    e.DetailTableView.DataSource = AdjustmentAPI.GetAdjustmentsByBatch(Convert.ToInt32(_dataItem.GetDataKeyValue("BatchID").ToString()), PolicyClaimManualAdjustmentCode); 
} 

回答

0

所以我想我會分享我的情況下,任何人都需要它的解決方案。

我正在用編輯控件吠叫錯誤的樹。即使評論是RadGrid中數據集的一部分,我也不想編輯現有記錄。我決定創建一個用戶控件來處理這個過程。 RadWindow不直接使用.ascx頁面,所以我開始使用.aspx包裝頁面並在那裏插入控件。然後我改變了OnClientClick事件來啓動RadWindow加載新的aspx文件,將我需要的參數傳遞給usercontrol。 usercontrol將評論保存到數據庫並更新記錄狀態,然後關閉。

我修改從上面本節:

private static void SetChildGridCommandColumns(object sender, GridItemEventArgs e) 
    { 
     ((ImageButton)(((GridEditableItem)e.Item)["PolicyEditRecord"].Controls[0])).ImageUrl = "/controls/styles/images/editpencil.png"; 
     ImageButton _btnReject = (ImageButton)((GridDataItem)e.Item)["DeleteTransaction"].Controls[0]; 
     int _manualAdjustmentId = Convert.ToInt32(((GridDataItem)e.Item)["ManualAdjustmentId"].Text); 
     int _manualAdjustmentBatchId = Convert.ToInt32(((GridDataItem)e.Item)["ManualAdjustmentBatchId"].Text); 

     _btnReject.ImageUrl = "/controls/styles/images/decline.png"; 
     _btnReject.ToolTip = "Reject this item"; 
     _btnReject.OnClientClick = String.Format("OpenRadWindow('/controls/RejectedAdjustmentComment.aspx?manualAdjustmentId={0}&manualAdjustmentBatchId={1}', 'CommentDialog');return false;", _manualAdjustmentId, _manualAdjustmentBatchId); 
    } 

    private void SubmittedBatchesRadGrid_DetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e) 
    { 
//I deleted this section 
     e.DetailTableView.EditFormSettings.EditFormType = GridEditFormType.WebUserControl; 
     e.DetailTableView.EditFormSettings.UserControlName = "/Controls/RejectedAdjustmentComment.ascx"; 
     e.DetailTableView.EditMode = GridEditMode.PopUp; 
// 

     e.DetailTableView.CommandItemSettings.ShowAddNewRecordButton = false; 
     GridDataItem _dataItem = e.DetailTableView.ParentItem; 
     e.DetailTableView.DataSource = AdjustmentAPI.GetAdjustmentsByBatch(Convert.ToInt32(_dataItem.GetDataKeyValue("BatchID").ToString()), PolicyClaimManualAdjustmentCode); 
    } 

我已將此添加到頁與數據網格:

<telerik:RadWindowManager ID="SubmittedBatchesWindow" runat="server"> 
    <windows> 
      <telerik:RadWindow ID="CommentDialog" runat="server" Title="Rejected Agjustment Comment Dialog" 
       Height="350px" Width="440" Left="250px" ReloadOnShow="false" ShowContentDuringLoad="false" 
       Modal="true" VisibleStatusbar="false" /> 
     </windows> 
</telerik:RadWindowManager> 

我創建了一個新的aspx文件和插入內

新ascx控件
<form id="form1" runat="server"> 
<telerik:RadScriptManager ID="RadScriptManager1" runat="server"> 
</telerik:RadScriptManager> 
<uc:RejectedComment id="RejectionComment1" runat="server" /> 
</form> 

我在ascx文件中添加了我的代碼,更新了前面的javascript結束

<script language ="javascript" type ="text/javascript" > 
    //<![CDATA[ 
    function GetRadWindow() { 
     var oWindow = null; 
     if (window.radWindow) oWindow = window.radWindow; //Will work in Moz in all cases, including clasic dialog 
     else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow; //IE (and Moz as well) 

     return oWindow; 
    } 

    function CancelEdit() { 
     GetRadWindow().close(); 
    } 

    //]]> 
</script> 

和最後但並非最不重要關閉窗口按鈕單擊事件成功完成更新之後;

Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "CancelEdit();", true); 

我希望別人認爲這有用。我花了好幾個小時來搜索telerik網站,一塊一塊找到這塊。

0

它看起來像你只需要使用OnClientClick來代替,並返回確認對話框的值。

_btnReject.OnClientClick = "return confirm(\"Are you sure you?\");" 

RadAjax有一個小怪癖,當涉及到確認的對話框,所以你可能需要使用它代替:

_btnReject.OnClientClick = "if (!confirm(\"Are you sure?\")) return false;" 
+0

嘿詹姆斯,謝謝我有那部分工作正常,只是現在的要求是,他們添加評論時,拒絕一個項目。所以我正在重塑。我能夠得到這個與JavaScript和一個aspx表單一起工作,但我想搭配內置的功能來加載一個usercontrol,就像使用自定義編輯表單一樣。 – Tim