Отступы 0 - MySQL
Итак, у меня есть столбец, который является моим ключевым столбцом и автоинкрементами, так что это не может быть 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 немного сложной для понимания.
В качестве альтернативы, можно ли выбрать SELECT *, а затем использовать mysql lpad в ОДНОМ определенном поле в *?
Спасибо!
3 ответа
SELECT *, как правило, не очень хорошая идея для использования. Это неизбежно вызывает больше проблем, чем экономит время при написании запроса.
Это позволит вам использовать LPAD на колонке.
Я собирался предложить использовать что-то вроде:
Response.Write ("" + item.ToString.PadLeft (2, '0') + "");
Но так как вы просто зацикливаете каждый элемент и визуализируете их одинаково, вышеприведенное будет заполнять каждую ячейку.
Поэтому я думаю, что ваш лучший вариант - изменить запрос, указав каждый столбец. Затем вы можете заполнить поле, как вы хотите.
Или используйте ORDER BY, если вас интересует только то, что они не упорядочены правильно (то есть упорядочены как символы, а не как целые).
в качестве альтернативы, создайте переменную для каждой ячейки, считываемой из базы данных, и визуализируйте каждую отдельно. это даст вам больше возможностей для настройки, если вы потребуете их.
Вы действительно должны всегда указывать имена столбцов явно и не использовать * в любом случае - см. Здесь.
Если вы настаиваете на использовании *, просто добавьте заполненное значение в другое поле:
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"]));
Вы можете добавить заполнение в C#, используя.ToString("D" + число ведущих нулей); например. если counter = 34 и вы вызываете counter.ToString("D5"), вы получите 00034.
Если вы используете строки, самый простой способ - преобразовать.toInt32(), а затем применить вышеизложенное.
Если вы предпочитаете продолжать использовать строки, просто посмотрите на --printf неверный язык- String.Format.