Изображение таблицы
Шаги взято:
просто чтобы вы знали, столбец Задача был добавлен вручную, вот таблица:
Task
Я проверяю тип данных столбца, хранящегося в базе данных:
Снимок экрана таблицы SQL Server, состоящей из столбцов,
и добавление данных из БД соответственно:
Скриншот данных в таблице SQL Server
Я пробовал :
- добавление TableRow несколько раз в таблицу, т.е. Group.Rows.Add(tableRow) (Group is имя моей таблицы)
- добавление TableRow один раз в конце, т.е. после добавления ячеек и строк
< li>создание нескольких TableRow и TableCell как для задачи, так и для статуса
Код:
protected void UpdatedUpdateTable()
{
const string connectionString = "Data Source=localhost;Initial Catalog=sunday.com;Integrated Security=True;Encrypt=False";
int user_id = Convert.ToInt32(Session["UserId"]);
using (SqlConnection connection = new SqlConnection(connectionString))
{
string getColumnsQuery = "SELECT * FROM columnsOfTables WHERE user_id = @user_id";
using (SqlCommand getColumnsCommand = new SqlCommand(getColumnsQuery, connection))
{
connection.Open();
getColumnsCommand.Parameters.AddWithValue("@user_id", user_id);
using (SqlDataReader reader = getColumnsCommand.ExecuteReader())
{
// Clear the space for the updated rows excluding the taskTextBox
for (int i = Group.Rows.Count - 1; i > 1; i--)
{
Group.Rows.RemoveAt(i);
}
while (reader.Read())
{
TableRow tableRow = new TableRow();
TableCell tableCell = new TableCell();
string dataType = reader.GetString(3);
if (dataType.Equals("Task"))
{
using (SqlConnection connection1 = new SqlConnection(connectionString))
{
connection1.Open();
string query = "SELECT * FROM dataOfTables WHERE user_id = @user_id AND board_id = @board_id AND data_type = @data_type";
using (SqlCommand command = new SqlCommand(query, connection1))
{
command.Parameters.AddWithValue("@user_id", user_id);
command.Parameters.AddWithValue("@board_id", this.getBoardId());
command.Parameters.AddWithValue("@data_type", "Task");
using (SqlDataReader taskReader = command.ExecuteReader())
{
while (taskReader.Read())
{
string task = taskReader["data"].ToString();
TextBox textBoxWithTask = new TextBox();
textBoxWithTask.ID = $"task-textbox-{taskReader["id"].ToString()}";
textBoxWithTask.Text = task;
textBoxWithTask.CssClass = "task-text-box";
textBoxWithTask.TextChanged += EditTask;
tableCell.Controls.Add(textBoxWithTask);
tableRow.Controls.Add(tableCell);
}
}
}
}
}
else if (dataType.Equals("Status"))
{
TableHeaderRow tableHeaderRow = (TableHeaderRow)Group.Rows[0];
bool statusHeaderExists = false;
foreach (TableCell cell in tableHeaderRow.Cells)
{
if (cell.Text.Equals(reader["column_name"].ToString()))
{
statusHeaderExists = true;
break;
}
}
if (statusHeaderExists == false)
{
TableHeaderCell statusHeaderCell = new TableHeaderCell();
statusHeaderCell.Text = reader["column_name"].ToString();
this.GroupHeaderRow.Cells.Add(statusHeaderCell);
}
using (SqlConnection connection1 = new SqlConnection(connectionString))
{
string query = "SELECT * FROM dataOfTables WHERE user_id = @user_id AND board_id = @board_id AND data_type = @data_type AND column_name = @column_name";
using (SqlCommand command = new SqlCommand(query, connection1))
{
connection1.Open();
command.Parameters.AddWithValue("@user_id", user_id);
command.Parameters.AddWithValue("@board_id", this.getBoardId());
command.Parameters.AddWithValue("@data_type", "Status");
command.Parameters.AddWithValue("@column_name", reader["column_name"].ToString());
using (SqlDataReader statusReader = command.ExecuteReader())
{
while (statusReader.Read())
{
string status = statusReader["data"].ToString();
HtmlGenericControl statusBtn = new HtmlGenericControl();
statusBtn.InnerText = statusReader["data"].ToString();
statusBtn.Attributes["id"] = $"status-btn-{statusReader["id"].ToString()}";
statusBtn.Attributes["class"] = "status-btn";
statusBtn.Attributes["type"] = "button";
if (statusReader["data"].ToString().Equals("Done")) {
statusBtn.Attributes["styles"] = "background-color: rgb(0, 200, 117)";
tableCell.Style["background-color"] = "rgb(0, 200, 117)";
}
else if (statusReader["data"].ToString().Equals("Working on it"))
{
statusBtn.Attributes["styles"] = "background-color: rgb(253, 188, 100)";
tableCell.Style["background-color"] = "rgb(253, 188, 100)";
}
else if (statusReader["data"].ToString().Equals("Stuck"))
{
statusBtn.Attributes["styles"] = "background-color: rgb(253, 188, 100)";
tableCell.Style["background-color"] = "rgb(253, 188, 100)";
}
else
{
statusBtn.Attributes["styles"] = "background-color: rgb(121, 126, 147)";
tableCell.Style["background-color"] = "rgb(121, 126, 147)";
}
tableCell.Controls.Add(statusBtn);
tableRow.Controls.Add(tableCell);
}
}
connection1.Close();
}
}
}
this.Group.Controls.Add(tableRow);
}
}
HtmlGenericControl addColumnBtn = new HtmlGenericControl("button");
addColumnBtn.Attributes["id"] = "AddColumnButton";
addColumnBtn.Attributes["class"] = "add-column-btn";
addColumnBtn.Attributes["type"] = "button";
addColumnBtn.Attributes["onclick"] = "showColumnsMenu()";
addColumnBtn.InnerText = "+";
TableHeaderRow headerRow = (TableHeaderRow)Group.Rows[0];
bool addColumnBtnHeaderExists = false;
foreach (TableCell cell in headerRow.Cells)
{
foreach (Control control in cell.Controls)
{
if (control is HtmlGenericControl btn && btn.Attributes["id"] == "AddColumnButton")
{
addColumnBtnHeaderExists = true;
break;
}
}
if (addColumnBtnHeaderExists)
break;
}
if (!addColumnBtnHeaderExists)
{
TableHeaderCell addColumnBtnHeaderCell = new TableHeaderCell();
addColumnBtnHeaderCell.Controls.Add(addColumnBtn);
headerRow.Cells.Add(addColumnBtnHeaderCell);
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... sks-column