Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在页面/网格加载期间基于gridviewcell值动态更改gridviewrow颜色?_C#_Asp.net_Gridview - Fatal编程技术网

C# 如何在页面/网格加载期间基于gridviewcell值动态更改gridviewrow颜色?

C# 如何在页面/网格加载期间基于gridviewcell值动态更改gridviewrow颜色?,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个带有数据绑定值的gridview。我在“ReportMain”表中有5行字段(Id、日期、时间、名称、区域、工作、描述、优先级、状态),我在gridview中显示所有5行(gridview名称“gridview1”,在运行时使用c#asp.net中的linq查询,在运行时显示这5行(3行状态为“完成”)其他两行的状态为“待定”)。现在,我想以绿色显示状态字段为“已完成”的行,并在加载过程中显示其他两行,但不显示任何颜色。所有行单元格值都有值,且不为空 我的代码: using System

我有一个带有数据绑定值的gridview。我在“ReportMain”表中有5行字段(Id、日期、时间、名称、区域、工作、描述、优先级、状态),我在gridview中显示所有5行(gridview名称“gridview1”,在运行时使用c#asp.net中的linq查询,在运行时显示这5行(3行状态为“完成”)其他两行的状态为“待定”)。现在,我想以绿色显示状态字段为“已完成”的行,并在加载过程中显示其他两行,但不显示任何颜色。所有行单元格值都有值,且不为空

我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI;
using System.Drawing;
using System.Web.UI.WebControls;

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var query = from row in db.ReportMains select row;
        GridView1.DataSource = query;
        GridView1.DataBind();
    }
}

protected void chkRow_CheckedChanged(object sender, EventArgs e)
{
    CheckBox checkbox = (CheckBox)sender;
    GridViewRow gdrow = (GridViewRow)checkbox.NamingContainer;

    if (checkbox.Checked)
    {
        gdrow.BackColor = System.Drawing.Color.LimeGreen;
        int rowindex = gdrow.RowIndex;
        int i = Convert.ToInt32( gdrow.Cells[0].Text);
        string a = gdrow.Cells[3].Text.ToString();          

        var Query = (from row in db.ReportMains where row.EmployeeName==a && row.Id==i
                     select new
                     {
                        row.EmployeeName,row.Id
                     }).Distinct();
        if (Query.Count() > 0)
        {
            var Q1 = from row in db.ReportMains where row.Id == Query.Single().Id select row;
            Q1.Single().Status = "Completed";
            db.SubmitChanges();
        }           
    }      

    else
    {
        gdrow.BackColor = System.Drawing.Color.MintCream;
        int rowindex = gdrow.RowIndex;
        int i = Convert.ToInt32(gdrow.Cells[0].Text);
        string a = gdrow.Cells[3].Text.ToString(); 
        var Query = (from row in db.ReportMains
                     where row.EmployeeName == a && row.Id == i
                     select new
                     {
                         row.EmployeeName,
                         row.Id
                     }).Distinct();
        var Q1 = from row in db.ReportMains where row.Id == Query.Single().Id select row;
        Q1.Single().Status = null;
        db.SubmitChanges();
    }
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    ReportMain rm = (ReportMain)e.Row.DataItem;
    string st = rm.Status;
    bool isCompleted = st == "Completed";
    e.Row.BackColor = isCompleted ? Color.Green : Color.White;

}

请帮助…

您可以始终使用这些行来获取底层的
数据源

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRow row   = ((DataRowView)e.Row.DataItem).Row;
        string name   = row.Field<string>("Name");
        string dept   = row.Field<string>("Dept");
        string work   = row.Field<string>("Work");
        string status = row.Field<string>("Status");
        bool isCompleted = status == "Completed"; // or status.Equals("Completed", StringComparison.CurrentCultureIgnoreCase)
        e.Row.BackColor = isCompleted ? Color.Green : Color.White;
    }
}

我已经删除了我的评论,并将其作为答案发布。现在您已经显示了源代码,您还没有使用下面的代码,尤其是
if(e.Row.RowType==DataControlRowType.DataRow)
缺失。第一行是没有
DataItem
的标题,这导致了
NullReferenceException
@karchigh:what是
ReportMain
?如果是自定义类,则将
e.row.DataItem
转换为该行。然后,您可以像我对
DataRow
那样访问属性。我已经编辑了我的答案因此,@karthigh:then
e.Row.DataItem
null
。您如何以及在何处分配
GridView
数据源
,向我们展示该代码。什么是
ReportMain
,为什么它是
null
?@karthigh:您没有提到数据绑定时数据源为null的原因。但是,如果您不要直接使用源代码,您还可以读取
单元格.Text
。假定状态为第9列:
bool isCompleted=e.Row.Cells[8]。Text==“Completed”;e.Row.BackColor=isCompleted?Color.Green:Color.White;
@karthigh:既然您已经发布了源代码,我注意到您没有使用我的代码。如果(e.Row.RowType==DataControlRowType.DataRow),您省略了
-检查哪一行很重要,因为第一行是
标题
,它没有
数据项
。非常感谢您耐心地帮助我…现在我明白了我的错误,得到了确切的结果。。。。
// ....
ReportMain rm = (ReportMain) e.Row.DataItem;
string name   = rm.Name;
string dept   = rm.Dept;
string work   = rm.Work;
string status = rm.Status;
bool isCompleted = status == "Completed"; // or status.Equals("Completed", StringComparison.CurrentCultureIgnoreCase)
e.Row.BackColor = isCompleted ? Color.Green : Color.White;