【问题标题】:changing color of particular row in datagrid C# windows ce compact framework在datagrid C# windows ce compact framework中更改特定行的颜色
【发布时间】:2016-06-23 10:42:15
【问题描述】:

我正在我的 windows ce 手持设备上使用 compact framework 2.0 开发一个 c# 应用程序。 我有一个像下面这样的网格

name        location  
----------------------
John          US
Flex          UK    

我已经使用 datagrid 来形成网格。注意: DataGrid(new System.Windows.Forms.DataGrid()) 不是 DataGridView 。 网格上方有一个文本框。如果用户在文本框中键入 uk,我必须更改数据网格中第二行的颜色。 我如何实现它??

 private System.Windows.Forms.DataGrid scnDataGrd = new System.Windows.Forms.DataGrid();

我添加了一个名为 status 的列。我想在那里显示一个图像。如果文本框中的文本匹配。

为表格添加列并基于csv填充值:

if (data.StartsWith("Coloumns"))
        data = data.Substring(index + 1, data.Length - (index + 1));
    data = data.Trim(); 
    string[] values = data.Split(',');
    // Add the index on the column on which data is stored in csv
    List<int> csvIndex = new List<int>();
    for (int i = 0; i < values.Length; i++)
    {
        values[i] = values[i].Trim();
        if (values[i] != "Status")
            csvIndex.Add(csvHeaders.IndexOf(values[i]));                        
    }

    rfidindex = (csvHeaders.IndexOf("RFID") == -1) ? csvHeaders.IndexOf("rfid") : csvHeaders.IndexOf("RFID");
    //Image myImage = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("search.png"));
     //ImageConverter imageConverter = new ImageConverter();
    Image img = AssetGatherMobileQuickTraQ.Properties.Resources.search;
        //Properties.Resources.my_image;
    string csvdata = strRdr.ReadToEnd();
    csvdata = csvdata.Replace('\r', ' ');
    string[] tagDets = csvdata.Split(new char[] { '\n' });
    csvItems = new Hashtable();
    DataTable dataTable1 = (DataTable)scnDataGrd.DataSource;

    for (int i = 0; i < tagDets.Length; i++)
    {
        string[] individTagDet = tagDets[i].Split(new char[] { ',' });

        if (individTagDet.Length <= 1)
            break;

        csvItems.Add(individTagDet[rfidindex].Replace("\"", string.Empty).Trim(), individTagDet);                                                                       
        DataRow row = dataTable1.NewRow();
        row.BeginEdit();
        //System.Drawing.Image imgTest = System.Drawing.Image. FromFile("C:\\Test.jpg");
        //System.Drawing.Image img = System.Drawing.Image.ReferenceEquals
        //dataTable1.Columns
        Bitmap image1 = new System.Drawing.Bitmap(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\search.png");


        //scnDataGrd.Dara
        row[0] = image1;
        //DataGrid
        for (int j = 0; j < 3; j++)
        {
            row[j+1] = individTagDet[csvIndex[j]].Replace("\"",string.Empty).Trim();                            
        }
        //scnDataGrd.TableStyles

        csvRfidList.Add(individTagDet[rfidindex].Replace("\"", string.Empty).Trim());
        missingTagList.Add(individTagDet[rfidindex].Replace("\"", string.Empty).Trim());

        row.EndEdit();
        dataTable1.Rows.Add(row);
        scnDataGrd.DataSource = dataTable1;
    }

如果文本匹配到这里:

DataTable dataTable = (DataTable)scnDataGrd.DataSource;
int index1 = -1;
bool found = false;
DataGridTableStyle ts = new DataGridTableStyle();


foreach (DataRow dr in dataTable.Rows)
{
    index1++;
    if (dr[tableColIndex].ToString() == textValue)
    {
        scnDataGrd.Select(index1);
        scnDataGrd.SelectionForeColor = Color.Red;
        break;
    }
    else {

        dr[0] = "Not Found";
    }
}

在状态栏中,显示为 System.Data.Bitmap 而不是图像

【问题讨论】:

  • 你想实现什么?勾选图片或复选框?
  • 我需要实现图片

标签: c# datagrid compact-framework windows-ce


【解决方案1】:

你不能给出这样的图像,你必须为此制作自定义图像视图,但如果你想要 thisfrom 复选框,你可以这样实现:

if (data.StartsWith("Coloumns"))
    data = data.Substring(index + 1, data.Length - (index + 1));
data = data.Trim(); 
string[] values = data.Split(',');
// Add the index on the column on which data is stored in csv
List<int> csvIndex = new List<int>();
for (int i = 0; i < values.Length; i++)
{
    values[i] = values[i].Trim();
    if (values[i] != "Status")
        csvIndex.Add(csvHeaders.IndexOf(values[i]));                        
}

rfidindex = (csvHeaders.IndexOf("RFID") == -1) ? csvHeaders.IndexOf("rfid") : csvHeaders.IndexOf("RFID");
//Image myImage = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("search.png"));
 //ImageConverter imageConverter = new ImageConverter();
Image img = AssetGatherMobileQuickTraQ.Properties.Resources.search;
    //Properties.Resources.my_image;
string csvdata = strRdr.ReadToEnd();
csvdata = csvdata.Replace('\r', ' ');
string[] tagDets = csvdata.Split(new char[] { '\n' });
csvItems = new Hashtable();
DataTable dataTable1 = (DataTable)scnDataGrd.DataSource;

for (int i = 0; i < tagDets.Length; i++)
{
    string[] individTagDet = tagDets[i].Split(new char[] { ',' });

    if (individTagDet.Length <= 1)
        break;

    csvItems.Add(individTagDet[rfidindex].Replace("\"", string.Empty).Trim(), individTagDet);                                                                       
    DataRow row = dataTable1.NewRow();
    row.BeginEdit();
    //System.Drawing.Image imgTest = System.Drawing.Image. FromFile("C:\\Test.jpg");
    //System.Drawing.Image img = System.Drawing.Image.ReferenceEquals
    //dataTable1.Columns
    Bitmap image1 = new System.Drawing.Bitmap(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\search.png");


    //scnDataGrd.Dara
    row[0] = image1;
    //DataGrid
    for (int j = 0; j < 3; j++)
    {
        row[j+1] = individTagDet[csvIndex[j]].Replace("\"",string.Empty).Trim();                            
    }
    //scnDataGrd.TableStyles

    csvRfidList.Add(individTagDet[rfidindex].Replace("\"", string.Empty).Trim());
    missingTagList.Add(individTagDet[rfidindex].Replace("\"", string.Empty).Trim());



    row.EndEdit();
    dataTable1.Rows.Add(row);

    DataColumn cCurrent = new DataColumn("Current", typeof(bool));
    dataTable1.Rows.Add(cCurrent);
    scnDataGrd.DataSource = dataTable1;
}

在您的标准中,您可以像这样实现条件......

 DataTable dataTable = (DataTable)scnDataGrd.DataSource;
        int index1 = -1;
        bool found = false;
        DataGridTableStyle ts = new DataGridTableStyle();


        foreach (DataRow dr in dataTable.Rows)
        {
            index1++;
            if (dr[tableColIndex].ToString() == textValue)
            {
                scnDataGrd.Select(index1);
                scnDataGrd.SelectionForeColor = Color.Red;

                dr["Current"] = true;
                break;
            }
            else
            {

                dr[0] = "Not Found";
            }
        }

当前在哪里

博士[“当前”] = true;

是我们之前在倒数第三行实现的 DataColumn。在以前的代码上。

【讨论】:

  • 作品 :) 谢谢
【解决方案2】:

试试这个改变背景颜色

        int index = -1;
        bool found = false;

        foreach (DataRow dr in myDataSet.Tables[0].Rows)
        {
            index++;
            string d = dr["location"].ToString();
            if (dr[0].ToString() == txtbox1,Text)
            {
                found=true;
                break;
            }
        }
        if(found)
        {
            scnDataGrd.Select(index);
            scnDataGrd.SelectionBackColor = Color.Blue;
        }

如果您想更改前景色,请将 SelectionBackColor 替换为 SelectionForeColor。这里 myDataSet 是 DataGrid 的绑定元素,首先我们找到 Data 的位置,然后从

中选择该行
scnDataGrd.Select(index);

并改变选择行的颜色

scnDataGrd.SelectionForeColor = Color.Blue;

希望对你有帮助。

编辑

你可以通过替换来更新字体颜色

scnDataGrd.SelectionBackColor = Color.Blue;

scnDataGrd.SelectionForeColor = Color.Blue;

【讨论】:

  • 如果我想改变特定行的字体颜色,而不是选择整行!我如何实现它?
  • 每次更改字体颜色或行的背景颜色时,您都必须选择整行,我也更新了字体颜色的答案
  • 它被突出显示,但是如果我通过触摸选择另一行,颜色格式会关闭。我希望它突出显示,直到我按下重置按钮
  • 另一个选项我也可以在行的第一列添加刻度图像。我该怎么做?
  • 为什么要勾选图片?如果您可以勾选特定行复选框? GridData 中的 checkBox 的实现将从此 Url 中找到。 msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 2010-12-03
  • 2010-09-24
  • 2015-08-25
  • 2023-04-09
  • 2016-06-04
  • 2015-12-26
相关资源
最近更新 更多