SQL Server 2008 データベースのストアド プロシージャから読み取る GridView コントロールがあり、特定のセルに特定のテキストが含まれている行の背景色を変更しようとしています。何らかの理由で、私が思いついたソリューションは、GridView に複数の行がある場合にのみ機能します。GridView に行が 1 つしかない場合、その行の行の色は変更されません。必要に応じてさらにコードを投稿しOnRowDataBound
ますが、GridView コントロールのイベントを使用しています。
OnRowDataBound
イベントのc#
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
for (int i = 0; i < GridView1.Rows.Count; i++)
{
//in every row I would like to check the text of the second cell
if (GridView1.Rows[i].Cells[1].Text == "C6N")
{
e.Row.BackColor = System.Drawing.Color.Red;
}
}
}
GridView コントロールの構造は次のとおりです。
columnName1 column1Desc columnName2 column2Desc
one C6N two zzz
目的は、column1Desc が等しい場合に GridView の行の色を変更することです。C6N
以下は、GridView をバインドするボタン クリックです。その下if(rdr.HasRows)
で応答オブジェクトに書き込みましたが、実際には C6N の正しい値を出力していますが、結果セットが 1 行のみの場合、書式設定の変更は行われません。
protected void Button2_Click(object sender, EventArgs e)
{
//craete the drugString variable
string drugString = string.Join(string.Empty,druglist.ToArray()).TrimEnd(',');
//create the connection string
string cs = ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString;
//create the connection object
using (SqlConnection con = new SqlConnection(cs))
{
//create the command object
using (SqlCommand cmd = new SqlCommand("spMakeTempTable2", con))
{
//don't forget to open the connection
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@drugList", drugString);
SqlDataReader rdr = cmd.ExecuteReader();
GridView1.DataSource = rdr;
GridView1.DataBind();
if (rdr.HasRows)
Response.Write(GridView1.Rows[0].Cells[1].Text);
//this line prints to the screen as it should
else
Response.Write("There were no drug combinations present");
}
}