2013-06-18 25 views
0

我在的RowDataBound附加編程按鈕頁腳:數據綁定到網格嵌套在頁腳

else if (e.Row.RowType == DataControlRowType.Footer) 
    { 
     e.Row.Cells[1].Text = "Total: "; 
     e.Row.Cells[2].Text = totalStaff.ToString(); 
     Button showStaff = new Button(); 
     showStaff.CommandName = "ShowAll"; 
     showStaff.Text = e.Row.Cells[2].Text.ToString(); 
     e.Row.Cells[2].Controls.Add(showStaff); 
     e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right; 
     showStaff.Click += new EventHandler(showStaff_Click); 
    } 

現在我想處理showStaff_Click將數據綁定到嵌套GridView控件。我在RowCommand中編寫了bwlow代碼,但索引爲空:

  if(e.CommandName == "ShowAll") 
      { 
       int index = Convert.ToInt32(e.CommandArgument.ToString());     
       GridViewRow row = Staff.Rows[index]; 
       GridView StaffInfo = (GridView)Staff.Rows[index].FindControl("StaffInfo"); 
       int TeamID = 0; 
       int cityID = 3699; 
       StaffInfo.DataSource = GetStaff(cityID, TeamID); 
       StaffInfo.DataBind(); 
      } 

我將不勝感激您的幫助。

編輯:

我名手一些變化:

protected void Staff_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    try 
    { 
     //Checking for command name which command/button is pressed 
     if (e.CommandName == "ShowDetails") 
     { 
      GridView Staff = (GridView)sender; 

      int index = Convert.ToInt32(e.CommandArgument); 
      GridViewRow row = Staff.Rows[index]; 
      GridView StaffInfo = (GridView)Staff.Rows[index].FindControl("StaffInfo"); 
      int TeamID = Convert.ToInt16(Staff.DataKeys[index].Values[0].ToString()); 
      int cityID = Convert.ToInt16(Staff.DataKeys[index].Values[1].ToString()); 
      StaffInfo.DataSource = GetStaff(cityID, TeamID); 
      StaffInfo.DataBind(); 
      StaffInfo.Visible = true; 
     } 
     else if(e.CommandName == "ShowAll") 
     { 
      int index = Convert.ToInt32(e.CommandArgument); 
      GridView StaffInfo = (GridView)Staff.Rows[index].FindControl("StaffInfo"); 
      int TeamID = 0; 
      int cityID = 3699; 
      StaffInfo.DataSource = GetStaff(cityID, TeamID); 
      StaffInfo.DataBind(); 
      StaffInfo.Visible = true; 
     } 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 
} 

<asp:GridView ID="Staff" runat="server" AutoGenerateColumns="false" 
    OnRowCommand="Staff_RowCommand" 
    DataKeyNames="TeamID,CityID" ShowFooter="True" HorizontalAlign="Center"> 
<Columns> 
    <asp:TemplateField HeaderText=" Function"> 
     <ItemTemplate> 
      <asp:Label Width="150px" ID="Function" ItemStyle-HorizontalAlign="Center" runat="server" Text='<%# Bind("Function") %>'></asp:Label> 
      <asp:GridView ID="StaffInfo" AutoGenerateColumns="false" runat="server"> 
       <Columns> 
        <asp:BoundField ItemStyle-Width="150px" DataField="FirstName" HeaderText="First Name" /> 
        <asp:BoundField ItemStyle-Width="150px" DataField="LastName" HeaderText="Last Name" /> 
        <asp:BoundField ItemStyle-Width="150px" DataField="SOEID" HeaderText="SOEID" /> 
       </Columns> 
      </asp:GridView>     
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText=" Team"> 
     <ItemTemplate> 
      <asp:Label Width="150px" ID="Team" ItemStyle-HorizontalAlign="Center" runat="server" Text='<%# Bind("Team") %>'></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Staff Count"> 
     <ItemTemplate> 
      <asp:Button Width="40px" ID="StaffCount" ItemStyle-HorizontalAlign="Center" runat="server" Text='<%# Bind("StaffCount") %>' CommandName="ShowDetails" CommandArgument="<%# ((GridViewRow)Container).RowIndex %>" CausesValidation="True" UseSubmitBehavior="False" />     
     </ItemTemplate> 
      <FooterTemplate> 
       <asp:Button id="TotalStaff" runat="server" Text="Button1" CommandName="ShowAll" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" CausesValidation="True" UseSubmitBehavior="False" /> 
      </FooterTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField Visible ="false"> 
     <ItemTemplate> 
      <asp:Label runat="server" Width="150px" DataField="TeamID" HeaderText="TeamID" ></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField Visible ="false"> 
     <ItemTemplate> 
      <asp:Label runat="server" ItemStyle-Width="150px" DataField="CityID" HeaderText="CityID"></asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Columns>  

當我嘗試點擊勾住ShowAll按鈕伊特返回指數超出範圍。我做了Response.Write(intex.ToString()),它返回-1。情況或行中的索引號被正確返回。問題在於頁腳按鈕。你可以幫我嗎?

回答

1

當您按下按鈕時,您沒有設置CommandArgument

Button showStaff = new Button(); 
showStaff.CommandName = "ShowAll"; 
showStaff.CommandArgument = e.Row.RowIndex.ToString(); 
showStaff.Text = e.Row.Cells[2].Text.ToString(); 
+0

我已經加入,並有tehe錯誤:「索引超出範圍必須大於集合的大小非負少參數名:索引」 – ironcurtain

+0

檢查您的網格有行,當你在點擊事件(在GridViewRow row = Staff.Rows [index];放置斷點並查看它有多少行以及索引是什麼),它應該可以幫助你。 – gzaxx

+0

我設置了斷點你想和它返回CommandArgument = -1 – ironcurtain