C# 使用DetailView中选定的ID作为参数

C# 使用DetailView中选定的ID作为参数,c#,asp.net,C#,Asp.net,如果我在表格中找到3个“是”表示某个ID,那么我将发送一封电子邮件。如您所见,下面的代码使用querystring作为参数,并在我的select语句中使用它,但我要做的是在DetailView中使用所选ID,而不是查询字符串。以下是使用查询sting的代码: protected void Check_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e) { SqlConnection con = new S

如果我在表格中找到3个“是”表示某个ID,那么我将发送一封电子邮件。如您所见,下面的代码使用querystring作为参数,并在我的select语句中使用它,但我要做的是在DetailView中使用所选ID,而不是查询字符串。以下是使用查询sting的代码:

protected void Check_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
    {


        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);

        SqlCommand cmd = new SqlCommand("SELECT count(*) from MyTable WHERE ID =@ID And (field1='Yes' And field2='Yes' And field3='Yes')", con);
        cmd.Parameters.Add("@ID", Request.QueryString["ID"]);
        cmd.Connection = con;
        con.Open();
        int result = (int)cmd.ExecuteScalar();

        if (result == 1)
        {
           send email...
        } 
这是我修改并尝试使用DetailView ID的更新代码,但无法正常工作,我在这里做错了什么请帮助:

 protected void Check_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
    {

        string ID = Detailview1.Rows[0].Cells[1].Text;
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand("SELECT count(*) from MyTable WHERE ID =@ID And (field1='Yes' And field2='Yes' And field3='Yes')", con);
        cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID;

        cmd.Connection = con;
        con.Open();
        int result =(int) cmd.ExecuteScalar();

        if (result == 1)
        {
        send email...
        }

看起来您总是在查看同一行,这在大多数情况下都是标题

string ID = Detailview1.Rows[0].Cells[1].Text;

相反,您应该使用事件的参数,如
e
,如果您正确设置了每件事,您可以通过
e.Keys
获得ID。您可以在调试模式下检查它的值。

我有一个下拉框,可以在其中为这些字段选择“是”或“否”,因此问题是,在第三个字段中选择“是”后,电子邮件不会立即发出。我必须返回并再次选择“是”其他字段中的一个,即使我已经选择了“是”,它将仅在第四次触发。但奇怪的是,我用于查询字符串的代码工作正常。在第3个字段设置为“是”后,会立即触发电子邮件。谢谢。活动什么时候开始?它可能是一种计时方式,在值更改之前触发事件,而不是在您完成更改时触发事件。但这是一个detailview控件。ID始终是第一行,ID的值始终是第一行和第二列。对不起,我的错误,因此您可以获取ID的值,那么表中的ID类型是什么。您是否尝试以与QueryString版本相同的方式添加参数。cmd.Parameters.Add(“@ID”,Request.QueryString[“ID]”);不,我没有这样做,因为我根本没有使用查询字符串。我还缺少什么?我是指cmd.Parameters.Add(“@ID”,ID);而不是给类型和设置值。是的,我改变了,电子邮件只发了第四次。我不明白,这两种代码有什么区别?一个是使用querystring,工作正常,另一个工作不正常!!!