-2

各列にクラス (CSS など) を使用して異なる dwign を指定したい。たとえば、ユーザー名の列を青でペイントしてフォントを 30px に拡大し、パスワードを赤でペイントしてフォントを「times new romans,12px」に変更します。SQL で DB と通信する次の cs コードがあります。

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public class MyAdoHelper
{
public static SqlConnection ConnectToDB(string fileName)
{
    string path = HttpContext.Current.Server.MapPath("App_Data/");
    path += "Database.mdf";

    string connString = @"Data Source=.\SQLEXPRESS;AttachDbFileName=" +
        path + ";Integrated Security=True;User Instance=True";

    SqlConnection conn = new SqlConnection(connString);

    return conn;

}
public static void DoQuery(string fileName, string sql)
{
    SqlConnection conn = ConnectToDB(fileName);
    conn.Open();
    SqlCommand com = new SqlCommand(sql, conn);
    com.ExecuteNonQuery();
    conn.Close();
}
public static DataTable ExecuteDataTable(string fileName, string sql)
{
    SqlConnection conn = ConnectToDB(fileName);
    conn.Open();
    DataTable dt = new DataTable();
    SqlDataAdapter tableAdapter = new SqlDataAdapter(sql, conn);
    tableAdapter.Fill(dt);
    return dt;
}
public static string printDataTable(string fileName, string sql)
{
    DataTable dt = ExecuteDataTable(fileName, sql);
    string printStr = "<table border='1'>";
    foreach (DataRow row in dt.Rows)
    {
        printStr += "<tr>";
        foreach (object myItemArray in row.ItemArray)
        {
            printStr += "<td>" + myItemArray.ToString() + "</td>";
        }
        printStr += "</tr>";
    }
    printStr += "</table>";
    return printStr;
}

public static bool IsExist(string fileName, string sql)
{
    bool found;
    SqlConnection conn = ConnectToDB(fileName);
    conn.Open();
    SqlCommand com = new SqlCommand(sql, conn);
    SqlDataReader data = com.ExecuteReader();
    found = (bool)data.Read();
    conn.Close();

    return found;
}
public static int RowsAffected(string fileName, string sql)
{
    SqlConnection conn = ConnectToDB(fileName);
    conn.Open();
    SqlCommand com = new SqlCommand(sql, conn);
    int rowsA = com.ExecuteNonQuery();
    conn.Close();

    return rowsA;
}
}

「printdataTable」を変更しようと思いましたが、わかりません。

4

1 に答える 1

2

クラス名を含む文字列を追加します。

string classUserName ="class='username'";
string classPasswords ="class='username'";

この部分を変更する必要があります。

 foreach (object myItemArray in row.ItemArray)
 {
    printStr += "<td>" + myItemArray.ToString() + "</td>";
 }

のようなものに

foreach (DataColumn dataCol in row.Table.Columns)
{
   printStr += String.Format("<td {0}>" + row[dataCol].ToString() + "</td>", dataCol.ColumnName == "UsersColumnName" ? classUserName  : classPasswords);
}

またはそのようなもの(ItemArrayを使用したい場合)

for (int i=0;i<row.ItemArray.Length;i++)
{
   //if column 0 of the row (0 element of ItemArray) is the user name column
   printStr += String.Format("<td {0}>" + row.ItemArray[i].ToString() + "</td>", i == 0 ? classUserName  : classPasswords);
}

編集:

両方の提案を修正しました:

1.最初のエラーは、「'System.Data.DataSet' には 'GetEnumerator' の定義が含まれていないため、foreach ステートメントは 'System.Data.DataSet' 型の変数に対して操作できません」です。

解決策: 正しく反復するには、'Columns' プロパティが必要でした。

2. 2 番目では、"<" 演算子を認識していません。

解決策: row.ItemArray には、Count プロパティではなく、Length プロパティがあります。

編集2:

2 番目のコメントについて、別の列を追加する必要がある場合は、次のようなことができます。

string classEmails ="class='email'";

   for (int i=0;i<row.ItemArray.Length;i++)
   {
     //if column 0 of the row (0 element of ItemArray) is the user name column
     //if column 1 of the row (1st element of ItemArray) is the password column
     //if column 2 of the row (2nd element of ItemArray) is the email column
     printStr += String.Format("<td {0}>" + row.ItemArray[i].ToString() + "</td>", i == 0 ?    classUserName  : (i == 1 ?  classPasswords : classEmails));
   }

三項式のアイテムよりもデータソースに多くの列がある場合、電子メール クラス (三項式の最後の要素) が他のすべての列に適用されます。

この場合、スイッチを使用して、他の列がフォーマットされないようにする必要があります。

for (int i=0;i<row.ItemArray.Length;i++)
{
switch(i){
        case 0:
        //if column 0 of the row (0 element of ItemArray) is the user name column
        printStr += String.Format("<td {0}>" + row.ItemArray[i].ToString() + "</td>", classUserName);
        break;
        case 1:
        //if column 1 of the row (1st element of ItemArray) is the password column
        printStr += String.Format("<td {0}>" + row.ItemArray[i].ToString() + "</td>", classPasswords);
        break;
        case 2:
        //if column 2 of the row (2nd element of ItemArray) is the email column
        printStr += String.Format("<td {0}>" + row.ItemArray[i].ToString() + "</td>", classEmails);
        break;
        default:
        //any column you do not want to style
        printStr += "<td>" + row.ItemArray[i].ToString() + "</td>";
        break;
    }
}
于 2013-03-28T08:20:44.783 に答える