2013-03-28 4 views
-2

Я хочу дать каждому столбцу разные dwign с классами (например, в CSS). Например, столбец имен пользователей для рисования синим шрифтом увеличить до 30px и красить пароли в красном и смените шрифт на «новые римляне, 12px». У меня есть следующий код CS связи с БД в SQL:другой класс CSS для каждого столбца в таблице базы данных

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», но я не знаю.

+0

почему люди голосуют -1 на мои вопросы? Разве это не место, где можно учиться на ошибках и задавать вопросы? –

+0

вы правы, и они должны дать конструктивную обратную связь о том, почему они проголосовали. Я бы предположил, что это потому, что вы не дали подробностей о том, что вы уже пробовали, и вопрос очень открыт. Вы хотите добиться изменения css в C# или вы счастливы сделать это на стороне клиента? из чего вы хотите совет? – Martyn0627

ответ

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); 
} 

EDIT:

Я исправил оба предложения:

1. в первом ошибка «Еогеасп оператор не может работать с переменными типа 'System.Data.DataSet', поскольку«System .Data.DataSet 'не содержит определения для «GetEnumerator».

Решение: Для корректной итерации требуется свойство «Столбцы».

2. Во втором он не знает «<» Оператор

Решение: row.ItemArray имеет длину собственности, а не граф один.

EDIT 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; 
    } 
} 
+0

VS сказал, что оба пути являются inncorrect. Во втором случае он не знает оператора «<», и в первом случае ошибка «оператор foreach не может работать с переменными типа« System.Data.DataSet », потому что« System.Data.DataSet 'не содержит определения для «GetEnumerator» –

+0

@theOrthanormalBeginner Спасибо за ваш вклад. Я повторно протестировал код и исправил ошибки. См. Редактирование моего сообщения. – CristisS

+0

Благодарим вас за ответ и редактирование еще раз, хотя DataColumn по-прежнему Не работает, ItemArray работает как шарм, спасибо еще раз. Кстати: если бы я добавил столбец писем, которые я хочу быть в другом классе, как мне отредактировать соответствующий проход (что добавить instaead из 'i = 0? ClassUserName: ClassPasswrod', если я также использую ClassMails)? –

Смежные вопросы