2013-01-22 40 views
0

我遇到的問題是我需要通過單擊按鈕傳遞多個參數。我有一個從SQLQuery對打印出值的中繼對象,並且按鈕有是從相同的查詢傳遞多個參數時編譯錯誤

這裏的論點是我的中繼器:

<asp:Repeater ID="Edit_Repeater" runat="server" DataSourceID="Edit_Repeater_Source"> 
       <HeaderTemplate> 
        <table class="u_Repeater"> 
         <tr> 
          <th> 
           Group Name: 
          </th> 
          <th> 
           Permission Level: 
          </th> 
          <th> 
           Remove: 
          </th> 
         </tr> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <tr> 
         <td> 
          <%#DataBinder.Eval(Container.DataItem, "Group_Name")%> 
         </td> 
         <td> 
          <%#DataBinder.Eval(Container.DataItem, "Name")%> 
         </td> 
         <td> 
          <asp:Button ID="Submit_Remove" runat="server" Text="Remove Permission" OnClick="Remove_Permission" CommandArgument='<%# Eval("GID") + ";" + Eval("PID") %>' /> 
         </td> 
        </tr> 
       </ItemTemplate> 
       <FooterTemplate> 
        </table> 
       </FooterTemplate> 
      </asp:Repeater> 

這裏是我的代碼背後:

protected void Remove_Permission(object sender, CommandEventArgs e) 
    { 
     string[] arg = new string[2];    
     string[] commandArgs = e.CommandArgument.ToString().Split(';'); 
     float GID = float.Parse(arg[0]); 
     float PID = float.Parse(arg[1]); 
     string UID = User_ID.SelectedValue; 

     using (SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["app_migrationConnectionString"].ConnectionString)) 
     { 
      SqlCommand cmd = new SqlCommand("DELETE FROM Membership WHERE GID = @GID AND PID = @PID AND UID = @UID", connection); 
      cmd.Parameters.Add("@GID", SqlDbType.BigInt, -1); 
      cmd.Parameters["@GID"].Value = GID; 
      cmd.Parameters.Add("@PID", SqlDbType.BigInt, -1); 
      cmd.Parameters["@PID"].Value = PID; 
      cmd.Parameters.Add("@UID", SqlDbType.NVarChar, -1); 
      cmd.Parameters["@UID"].Value = UID; 

      try 
      { 
       connection.Open(); 
       cmd.ExecuteNonQuery(); 
       connection.Close(); 
      } 

      catch (Exception ex) 
      { 

       throw ex; 
      } 
     } 
    } 

我越來越沒有生成錯誤,但是當我運行的頁面,我得到一個編譯錯誤說:

沒有重載「Remove_Permission」匹配委託「System.EventHand '

我幾乎肯定代碼是正確的,那麼問題是什麼?

+0

喜喬爾,這是一個多回答評論,但是,你應該使用'cmd.Parameters.AddWithValue(「@ GID」 ,SqlDbType.BigInt,-1);'。另外,你可以發佈完整的堆棧跟蹤嗎? – Brian

回答

1

CommandEventArgs更改爲EventArgs - 然後將您的發件人強制轉換爲Button並從此處獲取命令參數。

protected void Remove_Permission(object sender, EventArgs e) 
{ 
    var button = sender as Button; 
    if (button !=null) 
    { 
     var commandArg = button.CommandArgument; 
     //etc.... 
    } 
} 

或者使用Command Event代替Click事件。

+0

將其更改爲OnCommand工作。感謝您提供最簡單,最有效的解決方案 –

0

看來你Remove_Permission功能應該是類型:

public delegate void EventHandler(
Object sender, 
EventArgs e 
)