0

データベースからgridviewに値を表示するasp.netでアプリケーションを作成しています。データベースには、1または2または3の値を持つStatusIdという名前の列があります。

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 という名前のデータベースに保存されているカラー コードがあります。これらの色をこれらのステータスに適用する必要があります。

4

3 に答える 3

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 またはボタン クリック イベントに配置します。

于 2013-04-05T09:32:38.597 に答える
0

値がstatusId1,2,3 で、Color.FromName に渡しています。これと 1,2,3 は色の名前ではありません。スイッチを使用して、に基づいて異なる色を割り当てることができます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 ; 
于 2013-04-05T05:13:27.450 に答える
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;

                }
            }
        }
于 2013-04-19T10:16:02.487 に答える