如何在CommandArgument中使用两个参数并将其解压缩以在查询中使用它

时间:2014-05-30 12:59:03

标签: c# asp.net sql

我有以下ASP.net页面,它在转发器中显示名称和最后四个ssn号码:

<tr>
     <td><%# Eval("name").ToString() %></td>
     <td><%# Eval("ssn3").ToString() %></td>
     <td><asp:Button ID="btnGeneratePDF" runat="server" Text="Generate PDF" CommandArgument='<%# Eval("name").ToString() + ", " + Eval("ssn3").ToString() %>' onclick="btnGeneratePDF_Click" /></td>
</tr>

在我的代码后面评估命令参数,我有一个这样的代码:

    protected void btnGeneratePDF_Click(object sender, CommandEventArgs e)
{
    string[] ar = e.CommandArgument.ToString().Split(',');
    MessageBox.Show(ar[0]);
    MessageBox.Show(ar[1]);
    this.writeData(ar[0], ar[1]);
}

public void writeData(string k, string c)
{
    Conn = new SqlConnection(cString);
    Conn.Open();

    nameE = txtName.Text;

    var pdfPath = Path.Combine(Server.MapPath("~/PDFTemplates/fw9.pdf"));

    // Get the form fields for this PDF and fill them in!
    var formFieldMap = PDFHelper.GetFormFieldNames(pdfPath);
    formFieldMap["topmostSubform[0].Page1[0].f1_01_0_[0]"] = txtName.Text;

    sqlCode = "SELECT * FROM [DB].[dbo].[TablePDFTest] WHERE [name] = '" + k + "' AND [ssn3] = '" + c + "'";

    using (SqlCommand command = new SqlCommand(sqlCode, Conn))
    {
        command.CommandType = CommandType.Text;

        using (reader = command.ExecuteReader())
        {
            if (reader.HasRows)
            {
                if (reader.Read())
                {
                    formFieldMap["topmostSubform[0].Page1[0].f1_02_0_[0]"] = reader.GetValue(1).ToString();
                    formFieldMap["topmostSubform[0].Page1[0].f1_04_0_[0]"] = reader.GetValue(2).ToString();
                    formFieldMap["topmostSubform[0].Page1[0].f1_05_0_[0]"] = reader.GetValue(3).ToString();
                    formFieldMap["topmostSubform[0].Page1[0].f1_07_0_[0]"] = reader.GetValue(4).ToString();
                    formFieldMap["topmostSubform[0].Page1[0].social[0].TextField1[0]"] = reader.GetValue(5).ToString();
                    formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[0]"] = reader.GetValue(6).ToString();
                    formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[1]"] = reader.GetValue(7).ToString();
                    formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[2]"] = reader.GetValue(8).ToString();
                    formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[3]"] = reader.GetValue(9).ToString();
                }
            }
        }
    }

    // Requester's name and address (hard-coded)
    formFieldMap["topmostSubform[0].Page1[0].f1_06_0_[0]"] = "Medical Group\n20 West Ave\nPurchase, NY 10001";

    var pdfContents = PDFHelper.GeneratePDF(pdfPath, formFieldMap);

    PDFHelper.ReturnPDF(pdfContents, "Completed-W9.pdf");
}

我收到以下错误:

Error 1 No overload for 'btnGeneratePDF_Click' matches delegate 'System.EventHandler' C:\Users\usrs\Documents\Visual Studio 2012\Projects\PDFForms\searchcreate.aspx 41

如何解决错误?

4 个答案:

答案 0 :(得分:1)

protected void btnGeneratePDF_Click(object sender, EventArgs e)

在点击事件

中将CommandEventArgs更改为EventArgs

试试这个

protected void btnGeneratePDF_Click(object sender, EventArgs e)
{
  //Get the reference of the clicked button.
  Button button = (sender as Button);
  //Get the command argument
  string commandArgument = button.CommandArgument;
}

答案 1 :(得分:1)

您可以使用“命令名称”字段存储第二个参数或使用ASP:HiddenField,CustomProperty等

答案 2 :(得分:1)

所以,如果你在Repeater控件中有这个布局,那么你应该如何处理一个命令事件。

<asp:Repeater runat="server" ID="Repeater1"
              OnItemCommand="btnGeneratePDF_Click"
              ...

他们实现了btnGeneratePDF_Click它应该按原样运行,你不需要调整任何东西。但是我确实建议正确地重命名它,并使用CommandName - 如果你想在转发器中添加更多命令,这将证明是有用的。

还有一个侧面说明。请注意,Repeater的ItemCommand事件实际上使用RepeaterCommandEventArgs类,它是CommandEventArgs的子类。如果沿着上面的路径走,您可能也想在方法签名中更改它。

答案 3 :(得分:1)

您正尝试在点击事件中执行命令事件。 它应该是正确的:

<tr>
     <td><%# Eval("name").ToString() %></td>
     <td><%# Eval("ssn3").ToString() %></td>
     <td><asp:Button ID="btnGeneratePDF" runat="server" Text="Generate PDF" CommandArgument='<%# Eval("name").ToString() + ", " + Eval("ssn3").ToString() %>' OnCommand="btnGeneratePDF_Command" /></td>
</tr>

创建此新事件时,您会注意到event参数更改为CommandEventArgs。 您可以继续使用代码