使用asp.net动态创建表

时间:2011-05-30 16:58:08

标签: c# asp.net html-table

我想设计一个表,其行通过xml从另一个aspx页面检索。 假设我有一个页面getstudents.aspx,它以下列格式为数据库中的所有学生提供:

<?xml version="1.0" encoding="utf-8"?>
<allstudents>
    <student>
        <rollno>8001</rollno>
        <name>AAAA</name>
    </student>
    <student>
        <rollno>8002</rollno>
        <name>BBBB</name>
    </student>
</allstudents>

这样我从getstudents.aspx获取数据。

现在我想设计一个页面selectstudents.aspx 哪个输出跟html(每行有一个复选框的表) 通过以下方式:

<head>
<script type="text/javascript">
var values[];
function add(x)
{
//adds the value of ticked checkbox in values array and removes it when unticked

}
</script>
</head>
<body>
    <table>
        <tr>
            <td>&nbsp;</td>
            <td>Name</td>
        <tr>
            <td><input type="checkbox" name="cbRoll" value="8001" id="cbRoll8001" /></td>
            <td>AAAA</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="cbRoll" value="8002" id="cbRoll8002"/></td>
            <td>BBBB</td>
        </tr>
    </table>
    <form id="form1" name="form1"> 

    </form>
</body>

带有复选框的表是在运行时动态生成的 复选框的id,复选框的值(8001,8002等)以及下一个相应列中的名称(AAAA,BBBB等)。 通过读取页面getstudents.aspx给出的xml数据 也 只要勾选了一个复选框,就应该调用一个函数(比如说)addremove(this.id) 或者未标记的,应该在名为(例如)'values'的字符串数组中添加或删除checkbox(8001,8002等)的值。 然后我将通过POST向网页提交一个包含“8001; 8002; 8003等”的字符串 取决于选中的复选框 显然我将从数组'values'中创建字符串。

我不想在asp.net中使用现成的用户控件。 我想要做的比这更复杂,但这是它的简化版本。

为此,aspx页面的结构应该是什么,C#中的代码应该是什么?

1 个答案:

答案 0 :(得分:0)

selectstudents.aspx页面上,有一个&gt; NET Literal控件,您希望表格出现在哪里:

<body>
    <form id="form1" name="form1"> 
    <asp:Literal runat="server" id="ltrStudents" />
    </form>
</body>

然后在该页面的代码隐藏中,让学生使用XML并从中创建一个表格,如下所示:

  string xml =
                @"<?xml version='1.0' encoding='utf-8'?>
<allstudents>
    <student>
        <rollno>8001</rollno>
        <name>AAAA</name>
    </student>
    <student>
        <rollno>8002</rollno>
        <name>BBBB</name>
    </student>
</allstudents>";

            var studentsXml = XDocument.Parse(xml);

            var students = studentsXml.Element("allstudents").Elements("student").ToList();

            StringBuilder sb = new StringBuilder(500);

            sb.Append("<table>");

            foreach (var student in students)
            {
                string rollNumber = student.Element("rollno") != null ? student.Element("rollno").Value : string.Empty;
                string name = student.Element("name") != null ? student.Element("name").Value : string.Empty;

                sb.Append("<tr>");
                sb.Append("<td>&nbsp;</td>");
                sb.Append("<td>Name</td>");
                sb.Append("</tr>");

                sb.Append("<tr>");
                sb.AppendFormat("<td><input type='checkbox' name='cbRoll' value='{0}' id='cbRoll{0}' /></td>", rollNumber);
                sb.AppendFormat("<td>{0}</td>", name);
                sb.Append("<tr/>");
            }

            sb.Append("</table>");

ltrStudents.Text = sb.ToString();

尝试以上代码,看看它是否对您有所帮助。您可能需要设置ltrStudents控件的Mode属性 - 请检查this以获取帮助。

至于JavaScript,我的jQuery真的很生疏,但在ASPX中你可以拥有:

$(document).ready(
    function() {
        $("input[type=checkbox]").click(function(){
            alert($(this).attr('value')); // Store the rollno using a global variable.
    });
});

我只是在这里使用alert()来证明一个观点。在您的代码中,您需要将rollno存储在变量中。