如何根据解析进行gridcolumn类型的布尔检查

时间:2016-10-20 02:59:41

标签: c# winforms gridview devexpress

在我的firstform中,gridview显示了这个: enter image description here

然后我想使用此代码解析为secondform iam

string asscode = gridView1.GetFocusedRowCellValue("AsstCode").ToString();
Assistant assist = new Assistant(asscode);
assist.show();

解析时,字符串是一个变量,所以我需要拆分它们。我使用此split来打破它们

string ass_code;
public Assistant(string z) //this is form 2
{
  InitializeComponent();           
  ass_code = z;
}    

以第二种形式我已经从另一个gridview.datasource设置query,因此我需要使用此代码将自定义列添加到gridview,iam

 private void button1_Click(object sender, EventArgs e)
 {
  string[] names = ass_code.Split(';');
  gridView1.BeginUpdate();
  DataColumn col = dt.Columns.Add("X", typeof(Boolean));
  GridColumn column = gridView1.Columns.AddVisible(col.ColumnName);
  column.Caption = col.Caption;
  column.Name = col.ColumnName;
  gridView1.EndUpdate();
 }

对于secondform接口,gridview显示此

enter image description here

我想问的是

  1. 如何根据column x asscode0110300进行0110164检查,并检查其他值。正如您在column x上看到的那样,它的颜色为gray颜色不是1 or 0
  2. 当我尝试

        //string[] names = ass_code.Split(';');
        //foreach (string xy in names)
        //{
        //    MessageBox.Show(xy);
        //}
    

    它表明第一个是0110159,但第二个字符串0110164在第一个字符上有空格字符串。 <<因为这用于list 1

  3. 更新: 我使用此代码,但只检查0110300,因为它将0110159设置回false

    foreach (string x in names)
    {
         string[] names = ass_code.Split(';');
            for (int i = 0; i < gridView1.RowCount; i++)
            {
    
                    string xg = x.Trim();
                    string g = gridView1.GetDataRow(i)["code"].ToString().Trim();
                    if (g == xg)
                    {
                        gridView1.SetRowCellValue(i, "Dada", true);
    
                    }
                    else
                    {
                        gridView1.SetRowCellValue(i, "Dada", false);
                    }
                }
            }
    

    UPDATE2

    enter image description here

2 个答案:

答案 0 :(得分:0)

你做了很多便利的东西。 Devexpress Grid使用起来非常简单:

var data = //GETYOURDATA
gridControl.DataSource = data;

这会将您的数据填充到网格中。您甚至不需要创建任何列等。如果您现在想要一个值,则不应该使用GetRowCellValue();尝试使用您的数据源。

var actualRow = gridView.GetFocusedRow() as DataRowView;
MessageBox(actualRow["code"]); //Will print your code from code column

您需要了解的是,您的DataSource是真实的来源,GridView只显示此数据。如果您将数据存储在List<T>

,这会变得更加舒适

实施例

public class Employee()
{
   public int Code{get;set}
   public string Name{get;set;}
   public bool X {get{return Code == 0110300}}
   public static List<Employee> ReadAll(){//Get your data};
}

public class MyForm() : XtraForm
{
   var data = Employee.ReadAll();
   gridControl.DataSource = data;

   //Access Employee code
   Employee emp = gridView.GetFocusedRow() as Employee;
   MessageBox.Show(emp.Code.ToString());
}

<强>更新 使用@Rupesh中的第二种方法删除空格。并使用Equals进行字符串比较。进一步设置你的GridColumn&#39; X&#39;到column.UnboundType = DevExpress.Data.UnboundColumnType.Bool;以确保DevExpress不会覆盖您的数据。

<强> UPDATE-2

var names = ass_code.Split(';').Select(p => p.Trim()).ToList();
      for (int i = 0; i < gridView1.RowCount; i++)
      {
         string g = gridView1.GetDataRow(i)["code"].ToString().Trim();
         if (names.Contains(g))
            gridView1.SetRowCellValue(i, "Dada", true);
         else
            gridView1.SetRowCellValue(i, "Dada", false);
     }

答案 1 :(得分:0)

如果前导/尾随空格是问题的原因,那么您可以通过两种方式进行:

第一种方式:

IndexByNonUId
第二种方式:

string[] names = ass_code.Split(';');
// remove leading / trailing spaces
for (int i = names.Length-1; i >= 0; i-- )
    names[i] = names[i].Trim();