0

所以,我有一列是我的关键列和自动增量,所以它不能是 varchar 或任何有趣的东西。

请不要使用“Erhmahgerd urse werb contrerls”,因为我喜欢控制自己的 HTML 流并且不喜欢将其交给 .NET。我从来没有很好的经验(而且我喜欢我的代码是合规的)。我不希望这是一场火焰战争或任何事情 - 我只想用零填充。我觉得有必要这么说,因为它以前发生过太多次了。

所以无论如何。

DataTable tabledata = new DataTable();  
using (OdbcConnection con = new OdbcConnection(conString)) {
    using (OdbcCommand com = new OdbcCommand("SELECT * FROM equipment_table", con)) {
        OdbcDataAdapter myAdapter = new OdbcDataAdapter();
        myAdapter.SelectCommand = com;
        try {
            con.Open();
            myAdapter.Fill(tabledata);
        } catch (Exception ex) {
            throw (ex);
        } finally {
            con.Close();
        }
    }
}
Response.Write("<table id=\"equipment_listtable\"><thead><tr><th>Equipment ID</th><th>Equipment Name</th><th>Equipment Description</th><th>Type</th><th>In Use?</th><th>iOS Version (if applicable)</th><th>Permission Level</th><th>Status</th><th>Asset Tag</th><th>Details</th><th>Change</th><th>Apply</th></tr></thead>");
foreach (DataRow row in tabledata.Rows) {
    int counter = (int)row["Equipment_ID"];
    Response.Write("<tr>");
    foreach (var item in row.ItemArray) {
        Response.Write("<td>" + item + "</td>");
    }
    Response.Write("This stuff is irrelevant to my problem, so it is being left out... It uses counter though, so no complaining about not using variables...");
}
Response.Write("</table>");

可以想象,我的键列的值在生成的表中如下所示:

1
10
11
12
13
14
15
16
17
18
19
20
2
21

等等。我想用 0 填充来解决这个问题。做这个的最好方式是什么?有没有办法在我生成表格时定位特定字段?我查看了 DataRow.Item,但我一直发现 MSDN 文档有点难以理解。

或者,我可以选择 * 然后在 * 中的一个特定字段上使用 mysql 的 lpad 吗?

谢谢!

4

3 回答 3

1

SELECT * 通常不是一个好主意。它不可避免地会导致比通过编写查询节省的时间更多的问题。
这将允许您在列上使用 LPAD。

我正要建议使用类似的东西:
Response.Write("" + item.ToString.PadLeft(2, '0')+ "");

但是由于您只是循环每个项目并以相同的方式渲染它们,因此上面会填充每个单元格。

所以我认为你最好的选择是改变你的查询来指定每一列。然后,您可以根据需要填充该字段。
或者,如果您只担心它们的排序不正确(即,作为字符而不是整数排序),请使用 ORDER BY。

或者,为从数据库读取的每个单元格创建一个变量并分别渲染每个单元格。如果您需要,这将为您提供更多自定义选项。

于 2012-10-12T13:21:03.443 回答
0

您可以使用 .ToString("D" + number ofleading zeros) 在 C# 中添加填充;例如。如果 counter = 34 并且您调用 counter.ToString("D5"),您将得到 00034。

如果您使用的是字符串,最简单的方法是 convert.toInt32() 然后应用上述内容。

如果您想继续使用字符串,只需查看 --printf whups 错误的语言-- String.Format。

于 2012-10-12T13:14:02.367 回答
0

您确实应该始终明确指定您的列名,并且无论如何都不要使用 * - 请参见此处

如果您坚持使用 * 则只需将填充值作为另一个字段带入:

SELECT *,LPAD("Equipment_ID", 2, '0') as Equipment_ID_Padded FROM equipment_table

LPAD如果您的 Equipment_ID 长于 2 位,请记住将截断。

更好的解决方案可能是仅使用String.Format或填充代码中的值ToString("D2");

string paddedString = string.Format("{0:d2}", (int)row["Equipment_ID"]));
于 2012-10-12T13:10:45.977 回答