0

したがって、キー列と自動インクリメントである列があるため、varchar などの楽しいものにすることはできません。

「Erhmahgerd urse werb contrrls」は控えてください。私は自分の 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 パディングで修正したいと思います。これを行う最善の方法は何ですか?テーブルの生成中に SPECIFIC フィールドをターゲットにする方法はありますか? 私は DataRow.Item を調べましたが、MSDN のドキュメントを理解するのが少し難しいことにいつも気付きました。

または、* を選択してから、* 内の 1 つの特定のフィールドで mysql の lpad を使用できますか?

ありがとう!

4

3 に答える 3

1

SELECT *は、一般的に使用するのは良い考えではありません。必然的に、クエリを作成することで節約できる時間よりも多くの問題が発生します。
これにより、カラムでLPADを使用できるようになります。

私は次のようなものを使用することを提案しようとしていました:
Response.Write( "" + item.ToString.PadLeft(2、 '0')+ "");

ただし、各アイテムをループしてすべて同じ方法でレンダリングしているだけなので、上記ではすべてのセルが埋め込まれます。

したがって、最善のオプションは、クエリを変更してすべての列を指定することだと思います。次に、必要に応じてフィールドを埋めることができます。
または、正しく順序付けられていない(つまり、intではなくcharとして順序付けられている)ことだけが懸念される場合は、ORDERBYを使用します。

または、データベースから読み取ったセルごとに変数を作成し、それぞれを個別にレンダリングします。これにより、必要に応じて、より多くのカスタマイズオプションが提供されます。

于 2012-10-12T13:21:03.443 に答える
0

実際には、常に列名を明示的に指定する必要があり、とにかく*を使用しないでください。ここを参照してください。

*の使用を主張する場合は、パディングされた値を別のフィールドとして入力してください。

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

LPADEquipment_IDが2桁より長い場合は、切り捨てることを忘れないでください。

String.Formatより良い解決策は、またはを使用してコードの値を埋めることです。ToString("D2");

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

.ToString("D" + 先行ゼロの数); を使用して、C# でパディングを追加できます。例えば。counter = 34 の場合、counter.ToString("D5") を呼び出すと、00034 が返されます。

文字列を使用している場合、最も簡単な方法は convert.toInt32() してから上記を適用することです。

文字列を使い続けたい場合は、 --printf Whups 間違った言語-- String.Format を調べてください。

于 2012-10-12T13:14:02.367 に答える