访问使用字符串构建器在代码隐藏中创建的复选框

时间:2015-10-04 10:25:19

标签: c# asp.net

我使用字符串构建器类中的append方法在代码后面创建了一个html表,我从数据库中提供了数据,并为表中的每一行添加了一个复选框 但现在我不知道如何访问这些复选框以从表中删除选定的行

这是我的c#代码

    public void GetDataFirstTime() 
{
    string LogedInUser = Request.Cookies["CLGN"].Value.ToString();


    StringBuilder html = new StringBuilder();

    String result = String.Empty;
    SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["CRConnection"].ConnectionString);
    cnn.Open();
    SqlCommand cmd = new SqlCommand("Select MessageNum , Message , SenderName ,Date from Message where ReciverUserName=@run", cnn);
    cmd.Parameters.AddWithValue("@run", LogedInUser);

    SqlCommand cmd2 = new SqlCommand("Select Max(MessageNum) from Message where ReciverUserName=@run ",cnn);
    cmd2.Parameters.AddWithValue("@run", LogedInUser);



    HttpCookie Max = new HttpCookie("MMI");
    Max.Value = cmd2.ExecuteScalar().ToString();
    Response.Cookies.Add(Max);


    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);
    html.Append("<div id = xxx> ");

    html.Append("<table border='1'>");
    html.Append("<tr>");
    foreach (DataColumn col in dt.Columns)
    {
        html.Append("<th>");
        html.Append(col.ColumnName);
        html.Append("</th>");
    }

    html.Append("</tr>");

    foreach (DataRow row in dt.Rows)
    {
        html.Append("<tr>");
        foreach (DataColumn col in dt.Columns)
        {
            html.Append("<td>");
            html.Append(row[col.ColumnName]);
            html.Append("</td>");
        } 

        html.Append("<td>");
        html.AppendLine("<td><input TYPE=CHECKBOX NAME= CheckDel'" + row.ToString() + "'</td>");
        html.Append("</td>");

        html.Append("</tr>");
    }
    html.Append("</table>");
    html.Append("</div>");
    cnn.Close();

    Response.Write(html);
}

所以任何人都可以帮助我

1 个答案:

答案 0 :(得分:1)

首先,您需要更正创建复选框的代码。现在它产生这个HTML代码:

<td><td><input TYPE=CHECKBOX NAME= CheckDel'System.Data.DataRow'</td></td>

浏览器会将其解释为:

<td></td>
<td>
  <input type="CHECKBOX" name="CheckDel'System.Data.DataRow'</td">
</td>

由于彼此嵌套了表格单元格标签,浏览器将在开始下一个单元格之前结束第一个单元格。由于输入标记没有结束括号,因此它将使用</td>标记的右括号结束它,包括复选框名称中的</tdrow.ToString()没有从数据行获取任何内容,它返回类的名称,即"System.Data.DataRow"

我假设你想使用数据行中的一些数据来创建复选框名称,如下所示:

html.Append("<td>");
html.Append("<input type=\"checkbox\" name=\"CheckDel").Append(row["id"]).Append("\">");
html.Append("</td>");

现在,当您执行回发时,任何选中的复选框都将包含在表单数据中,与此类似(复选框的默认值为"on"):

CheckDel42=on

您可以使用Request.Form集合来检查复选框。遍历数据行中的项目并检查相应的表单值,如:

if (Request.Form["CheckDel" + row["id"]] != null) {
  // the checkbox was checked for this item
}