2012-02-12 12 views
0

ネストされたグリッドが編集可能なグリッド内にグリッドがある場合、この問題が発生します。私は編集作業を得ることができません。複雑なことは、ネストされたグリッドがモーダルポップアップエクステンダーの内側にあることです。ネストされたグリッド編集が機能しない

私は編集ボタンをクリックするまで動作します。次に、EmptyDataTextプロパティがメッセージで起動します。 2回目にクリックすると、グリッドは編集モードで開きますが、更新/キャンセルボタンは機能しません。キャンセルボタンをクリックすると、EmptyDataTextプロパティが表示されます。

もう1つの問題は、このネストされたグリッドはオブジェクトデータソースを使用しないため、コードファイルですべての更新と削除を行う必要があるということです。どちらかといえば、今は分かりません。

これを修正する方法についていくつかのアドバイスをしたいと思います。

<asp:GridView ID="gvForum" runat="server" DataSourceID="odsForumApproval" DataKeyNames="id" Width="200px" 
RepeatColumns="1" DataKeyField="id" CssClass="gridview" 
AutoGenerateColumns="False" GridLines="None" OnSelectedIndexChanged="_OnCommand"> 
<AlternatingRowStyle CssClass="altbgcolor" /> 
<Columns> 
    <asp:TemplateField > 
     <ItemTemplate> 
      <asp:Label runat="server" ID="lblTitle" Text='<%# Bind("Title") %>' /> 

      <asp:Panel id="div" runat="server" align="center" class="confirm" style="display:none" > 
       <asp:GridView runat="server" ID="gvForumDetail" AutoGenerateColumns="False" DataKeyNames="id" 
        AllowPaging='true' CssClass="gridview" 
        AllowSorting="true" PageSize="5" CellPadding="5" OnRowEditing="gvForumDetail_OnRowEditing" 
        OnRowCancelingEdit="gvForumDetail_CancelRecord" > 
        <AlternatingRowStyle CssClass="altbgcolor" /> 
        <RowStyle VerticalAlign="Top" HorizontalAlign="Left" /> 
        <HeaderStyle CssClass="greenbar" ForeColor="White" /> <Columns> 
         <asp:BoundField DataField="id" ReadOnly="true" Visible="false" /> 
         <asp:TemplateField HeaderText="Title"> 
          <ItemTemplate> 
           <asp:Label runat="server" ID="lblTraining" Text='<%# Bind("title") %>' /> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox runat="server" ID="txtTraining" Text='<%# Bind("title") %>' /> 
          </EditItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Post Message"> 
          <ItemTemplate> 
           <asp:Label runat="server" ID="lblCompletionDate" Width="250" Text='<%# Bind("description") %>' /> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:TextBox runat="server" ID="txtDescription" Text='<%# Bind("description") %>' TextMode="MultiLine" Rows="5" Width="250" /> 
          </EditItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Posted By"> 
          <ItemTemplate> 
           <asp:Label runat="server" ID="lblRecurence" Text='<%# Bind("MemberName") %>' /> 
          </ItemTemplate> 
         </asp:TemplateField> 
         <asp:TemplateField HeaderText="Posted Date"> 
          <ItemTemplate> 
           <asp:Label runat="server" ID="lblNotes" Text='<%# Eval("itemdate", "{0:d}") %>' /> 
          </ItemTemplate> 
          <EditItemTemplate> 
           <asp:CheckBox runat="server" ID="cbxApproved" Text='<%# Bind("approved") %>' /> 
          </EditItemTemplate> 
         </asp:TemplateField> 
         <asp:CommandField ShowCancelButton="true" ShowEditButton="true" ShowDeleteButton="true" /> 
        </Columns> 
       </asp:GridView> 
       <br /> 
       <Club:RolloverLink ID="btnClose" runat="server" Text="Close" /> 
      </asp:Panel> 

      <ajaxToolKit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" 
       TargetControlID="lblTitle" 
       PopupControlID="div" 
       CancelControlID="btnClose" 
       BackgroundCssClass="modalBackground" /> 

     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:CommandField ShowSelectButton="True" /> 
</Columns> 

コードの後ろに:ここにコードがある

public void _OnCommand(object sender, EventArgs e) 
{ 
    ObjectDataSource ods = new ObjectDataSource(); 
    ods.ID = "ods_ForumDetail"; 
    ods.EnableViewState = true; 
    ods.TypeName = "ForumApproval"; 
    ods.SelectMethod = "GetForumById"; 

    string id = ""; 
    int rowIndex = gvForum.SelectedIndex; 
    id = gvForum.DataKeys[rowIndex].Value.ToString(); 
    ods.SelectParameters.Add("id", System.TypeCode.Int32, id); 

    var ModalPopupExtender1 = (ModalPopupExtender)(gvForum.SelectedRow.FindControl("ModalPopupExtender1")); 
    ModalPopupExtender1.Show(); 

    var gvForumDetail = (GridView)(gvForum.SelectedRow.FindControl("gvForumDetail")); 
    gvForumDetail.DataSource = ods; 
    gvForumDetail.DataBind(); 
} 

protected void gvForumDetail_OnRowEditing(Object sender, GridViewEditEventArgs e) 
{ 
    var ModalPopupExtender1 = (ModalPopupExtender)(gvForum.SelectedRow.FindControl("ModalPopupExtender1")); 
    ModalPopupExtender1.Show(); 

    var gvForumDetail = (GridView)(gvForum.SelectedRow.FindControl("gvForumDetail")); 

    gvForumDetail.EditIndex = e.NewEditIndex; 
    gvForumDetail.DataBind(); 
} 

protected void gvForumDetail_CancelRecord(object sender, GridViewCancelEditEventArgs e) 
{ 
    var ModalPopupExtender1 = (ModalPopupExtender)(gvForum.SelectedRow.FindControl("ModalPopupExtender1")); 
    ModalPopupExtender1.Show(); 

    var gvForumDetail = (GridView)(gvForum.SelectedRow.FindControl("gvForumDetail")); 
    gvForumDetail.EditIndex = -1; 
    gvForumDetail.DataBind(); 
} 

答えて

1

私は、コードを更新および削除、あなたの質問の一部にお答えしようとします。内側のグリッドビュー(OnRowCommand)の "onrowcommand"を利用する必要があります。

+0

はいOnRowCommandは、OnUpdatingまたはOnDeletingのいずれかが発生する前に発生します。ありがとう、それは良いスタートです。 – Risho

関連する問題