C# 同时在不同行中设置ColumnError

C# 同时在不同行中设置ColumnError,c#,devexpress,multiple-columns,C#,Devexpress,Multiple Columns,我有时使用SetColumnError方法,根据我的经验,我知道当行失去焦点时图标会消失 我现在想要的是在不同行的不同单元格中同时显示相同的错误图标。大概是这样的: for (int i = 0; i < view.RowCount; i++) { /* Move the focus for setting the error */ view.FocusedRowHandle = i; if (condition) { view.Set

我有时使用
SetColumnError
方法,根据我的经验,我知道当行失去焦点时图标会消失

我现在想要的是在不同行的不同单元格中同时显示相同的错误图标。大概是这样的:

for (int i = 0; i < view.RowCount; i++)
{ 
    /* Move the focus for setting the error  */
    view.FocusedRowHandle = i;

    if (condition)
    {
        view.SetColumnError(view.Columns["NameOfColumn"],
                                         "Message", ErrorType.Critical);            
    }
}
public partial class UsDesiredName : UserControl3
{
    //Some code for your class

    private void ValidateData()
    {
        var data = gc_view.DataSource as List<MyModel>;
        foreach (var item in data)
        {                
            item.ClearErrors();
            if (condition for columnA)
            {
                item.NoteError = "Required fields.";
                item.SetColumnError("NameOfColumnA", "Required field.");                                       
            }  

            if (condition for columnB)
            {
                item.NoteError = "Required fields.";                    
                item.SetColumnError("NameOfColumnB", "Required field.");                    
            }    
        }
    }

    private void gc_view_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
    {
        ValidateData()
    }
}
for(int i=0;i
我尝试了类似的方法,但没有成功,我唯一的成就是,带有焦点的最后一行在指定的单元格中显示了错误图标。我想用
SetColumnError
来实现这一点,但如果有其他方法来实现这一点


非常感谢您的帮助。

很抱歉,
GridView.SetColumnError()
只能用于重点行


为了满足您的需求,您必须使用
GridColumn.ImageIndex
ColumnView.Images
属性手动实现它,以便在列标题中显示图标。

问题在于
网格本身无法存储错误,这就是为什么只维护
FocusedRow
的图标错误,但您可以实现某些
接口
并存储每行的所有错误

接口的名称是,此p提供了提供自定义错误信息的功能,用户界面可以绑定到该信息

下面是使用此接口的示例:

public class MyModel : IDataErrorInfo
{
    /// <summary>
    /// Stores error descriptions for the properties.
    /// </summary>
    Hashtable propertyErrors;

    /// <summary>
    /// Stores an error description for the item.
    /// </summary>
    String fNoteError;

   /// <summary>
   /// Gets and sets an error for the current item
   /// </summary>
   internal string NoteError
   {
       get { return fNoteError; }
       set
       {
           if (fNoteError != null && fNoteError == value) return;
           fNoteError = value;
       }
    }

    //Returns an error description set for the item's property
    string IDataErrorInfo.this[string columnName]
    {
        get
        {
           return GetColumnError(columnName);
        }
    }

    //Returns an error description set for the current item
    string IDataErrorInfo.Error
    {
        get { return NoteError; }
    }   

    public String NameOfColumnA { get; set; }
    public String NameOfColumnB { get; set; }

    public MyModel()
    {
       propertyErrors = new Hashtable { { "NameOfColumnA", "" }, { "NameOfColumnB", "" }};
       fNoteError = "";
    }     

    //Sets an error for an item's property
    public void SetColumnError(string elem, string error)
    {
        if (propertyErrors.ContainsKey(elem))
        {
            if ((string)propertyErrors[elem] == error) return;
            propertyErrors[elem] = error;
        }
    }

    //Gets an error for an item's property
    public string GetColumnError(string elem)
    {
       if (propertyErrors.ContainsKey(elem))
          return (string)propertyErrors[elem];
       else
          return "";
    }

    public void ClearErrors()
    {
       SetColumnError("NameOfColumnA", "");
       SetColumnError("NameOfColumnB", "");           
       NoteError = "";
    }
}

我希望这对某些人和我一样有用。

看看这个DevExpress示例是否适合您的需要:为了让这对我有用,我必须在循环中将每一行设置为聚焦,否则直到这些行聚焦后才会显示错误。谢谢