2013-04-05 97 views
0

我在asp.net中制作一个应用程序,它显示gridview中数据库的值。在数据库中,我有一个名为StatusId的colmn,其值为1或2或3通过数据库更改gridview的行颜色值

我试图通过它们的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数据库中的颜色代码。我必须将这些颜色应用于这些状态。

+2

为什么不直接返回状态颜色作为网格绑定的数据的一部分?您目前的做法会导致数据库调用*每行*。 – 2013-04-05 05:11:12

+0

是的,我认为这将是更好的方式来改变每一行的颜色。 – 2013-04-05 05:12:44

回答

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

检查更新的问题朋友.... – 2013-04-05 05:15:58

+0

statusId会有什么值,它们仍然是1,2,3问题? – Adil 2013-04-05 05:23:47

+0

是的,而不是进入编码,我们可以更改数据库中的颜色值。 – 2013-04-05 05:25:01

0

你这样做是错误的。你必须在网页加载或自定义事件(比如点击一个按钮)上数据绑定你的gridview &不是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 
     } 

    } 
} 

把数据绑定代码在任一页面加载或按钮的Click事件指定颜色。

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; 

       } 
      } 
     }