2013-10-08 140 views
1

我有一個Gridview和裏面我有另一個嵌套GridView。當我按加號按鈕嵌套GridView擴展使用JavScript。嵌套0​​使用TextBox控件在編輯模式下進行擴展。所以當用戶輸入TextBox時,用戶可以使用更新按鈕更新單元格。我的問題是,當我按下更新按鈕更新發生,但不是我的預期。例如,如果一個單元格的初始值是「我的名字是彼得」,並且我已經完成了編輯「我沒有名字」,那麼將會保存的新值就是這樣的:「我的名字是彼得,我不喜歡沒有名字「。嵌套0​​的數據綁定發生在父代GridViewDataBound事件中。 我的代碼:更新gridview行添加舊值和新

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" OnPageIndexChanging="gridView_PageIndexChanging" 
    AutoGenerateColumns="False" DataKeyNames="myitemID" 
    OnRowDataBound="GridView_RowDataBound"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <img alt = "" style="cursor: pointer" src="../plus.png" /> 
        <asp:GridView ID="nestedGridView" runat="server" 
         AutoGenerateColumns="False" 
         DataKeyNames="mynestedID"> 
         <Columns> 
          <asp:TemplateField HeaderText="nestedID" Visible="false" ItemStyle-Width="20%" 
           SortExpression="nesteditemID"> 
           <ItemTemplate> 
            <asp:Label ID="nesteditemID" runat="server" Text='<%# Bind("nesteditemID") %>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Name" ItemStyle-Width="20%" 
           SortExpression="Name"> 
            <ItemTemplate> 
             <asp:TextBox ID="name" TextMode="MultiLine" Width="80%" Rows="3" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox> 
            </ItemTemplate> 
           </asp:TemplateField> 
           <asp:Panel ID="mypanel" runat="server"> 
            <table> 
             <tr> 
              <td> 
               &nbsp; 
               <asp:ImageButton ID="ImageButton2" OnClick="updatename_Click" ImageUrl="~/images/update.jpg" Width="15px" Height="15px" runat="server"></asp:ImageButton> 
              </td> 
             </tr> 
            </table> 
            </asp:Panel> 
           </ItemTemplate> 
          </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 
       </asp:Panel> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="myitemID" InsertVisible="False" 
      SortExpression="myitemID" Visible="False"> 
      <ItemTemplate> 
       <asp:Label ID="myitemID" runat="server" Text='<%# Bind("myitemID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="ItemName" ItemStyle-Width="20%" 
      SortExpression="ItemName"> 
      <ItemTemplate> 
       <asp:Label ID="ItemName" runat="server" Text='<%# Bind("ItemName") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

CS代碼:

protected void updatename_Click(object sender, EventArgs e) 
{ 
    GridViewRow masterrow = (GridViewRow)(sender as Control).Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent; 
    GridViewRow row = (GridViewRow)(sender as Control).Parent.Parent.Parent; 
    int index = row.RowIndex; 
    int mi = masterrow.RowIndex; 
    int i = index; 
    GridView nestedGridView = (GridView)GridView1.Rows[mi].FindControl("nestedGridView"); 

    Label nestedID = (Label)nestedGridView.Rows[index].FindControl("nestedID"); 

    int sbid = Convert.ToInt32(nestedID.Text); 
    TextBox name = (TextBox)nestedGridView.Rows[index].FindControl("name"); 
    string myname = Convert.ToString(name.Text); 

    //update name with the new value 
    Nesteditem updatenesteditem = mylinqobjects.Nesteditems.Single(p => p.nesteditemID == sbid); 
    if (!string.IsNullOrEmpty(myname)) 
    { 
     updatenesteditem.nesteditemName = myname; 
     mylinqobjects.SubmitChanges(); 
    } 
} 
+0

把您的查詢代碼 –

+0

哪一個?因爲我的問題是保存將插入的值的字符串既舊和新值用逗號分隔 – focus

+0

是的,但這段代碼似乎不是問題,因爲我問這是爲什麼問 –

回答

0

通過移除舊的替換當前文本。

string myname = name.Text.Substring(name.Text.LastIndexOf(",")+1); 

嘗試了所有可能性,但由於嵌套的網格視圖渲染及其限制,我們只能像上面那樣做。

任何其他解決方案,請提供。