我在asp.net中创建一个应用程序,它在数据库中显示gridview中的值。在数据库中,我有一个名为StatusId的colmn,其值为1或2或3。
我尝试通过statusId值显示不同颜色的网格视图行。但它永远不会奏效。我怎么能在asp.net中做到这一点。
这是我的代码
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
Connection.Open();
SqlCommand Command1 = Connection.CreateCommand();
Command1.CommandText = "Select statusColor from status where statusId=(Select statusId from fileInfo where userId=(Select userId from userInfo where email='" + Session["email"].ToString() + "'))";
for (int i = 0; i < GridView1.Rows.Count; i++)
{
using (SqlDataReader reader = Command1.ExecuteReader())
{
while (reader.Read())
{
statusId = reader["statusColor"].ToString();
}
GridView1.RowStyle.BackColor = Color.FromName(statusId);
}
}
foreach (GridViewRow row in GridView1.Rows)
{
row.BackColor = Color.Green;
}
SqlCommand com = new SqlCommand("gridcolor", Connection);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@statusId", statusId);
com.Parameters.Add("@statusColor", SqlDbType.NVarChar, 30);
com.Parameters["@statusColor"].Direction = ParameterDirection.Output;
com.ExecuteNonQuery();
string msg = (string)com.Parameters["@statusColor"].Value;
Connection.Close();
}
我在这里做的错误是什么?
修改
我有颜色代码存储在名为statusColor的数据库中。我必须将这些颜色应用于这些状态。
答案 0 :(得分:0)
你有statusId
的值为1,2,3而你传递给Color.FromName,而1,2,3不是颜色的名称,你可以使用switch来分配不同的颜色在statusId
。
Color rowColor = Color.Red;
switch(statusId)
{
case 1:
rowColor = Color.Green;
break;
case 2:
rowColor = Color.White;
break;
case 3:
rowColor = Color.Blue;
break;
}
GridView1.RowStyle.BackColor = rowColor ;
答案 1 :(得分:0)
你这样做是错误的。您必须在页面加载或自定义事件(例如单击按钮)上对数据视图进行数据绑定。不是rowDataBound
事件。当您的行与数据绑定时会发生此事件。你想改变每一行的一些属性(如你的情况)。
您可以使用Gridview DataBound事件以下列方式分配颜色
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Fetch status Id for current row
int statusId= Convert.ToInt32(DataBinder.Eval(e.Row.DataItem,"UnitsInStock"));
switch (statusId)
{
case (1):
e.Row.BackColor= System.Drawing.Color.Green;
break;
// other cases follow the same
}
}
}
将数据绑定代码放在pageLoad或按钮单击事件中。
答案 2 :(得分:0)
protected void grdMyQ_RowDataBound(object sender, GridViewRowEventArgs e)
{
for (int i = 0; i < grdMyQ.Rows.Count; i++)
{
if (grdMyQ.Rows[i].Cells[13].Text.ToUpper() == "DISCHARGED_PROCESS")
{
grdMyQ.Rows[i].BackColor = Color.Red;
}
}
}