# C1.Win.FlexGrid.C1FlexGridBase.CustomComparer

## Content

<div class="doc-site-dotnet-api-container">



<h1 id="C1_Win_FlexGrid_C1FlexGridBase_CustomComparer_" data-uid="C1.Win.FlexGrid.C1FlexGridBase.CustomComparer*">CustomComparer Property
</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>



<a id="C1_Win_FlexGrid_C1FlexGridBase_CustomComparer_" data-uid="C1.Win.FlexGrid.C1FlexGridBase.CustomComparer*"></a>
<h4 id="C1_Win_FlexGrid_C1FlexGridBase_CustomComparer" data-uid="C1.Win.FlexGrid.C1FlexGridBase.CustomComparer">CustomComparer</h4>
<div class="markdown level1 summary"><p>Gets or sets a custom comparer object used by the grid to perform grouping,
merging, and searching operations.</p>
</div>
<div class="markdown level1 conceptual"></div>
<h5 class="declaration">Declaration</h5>
<div class="codewrapper">
  <pre><code class="lang-csharp hljs">[Browsable(false)]
public IComparer CustomComparer { get; set; }</code></pre>
</div>
<div class="codewrapper">
  <pre><code class="lang-vbnet hljs">&lt;Browsable(False)&gt;
Public Property CustomComparer As IComparer</code></pre>
</div>
<h5 id="C1_Win_FlexGrid_C1FlexGridBase_CustomComparer_remarks">Remarks</h5>
<div class="markdown level1 remarks"><p>The grid has a default <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.icomparer">IComparer</a> implementation that is used to compare 
cells and determine if their contents are equivalent. This implementation is used when merging, 
grouping, or searching for values (see the <a class="xref" href="C1.Win.FlexGrid.C1FlexGrid.AllowMerging.html#C1_Win_FlexGrid_C1FlexGrid_AllowMerging">AllowMerging</a> property and the 
<span class="xref">C1.Win.FlexGrid.C1FlexGridBase.Subtotal(C1.Win.FlexGrid.AggregateEnum,System.Int32,System.Int32,System.Int32,System.Int32,System.String,C1.Win.FlexGrid.AggregateFlags,C1.Win.FlexGrid.RowColFlags)</span> and <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">FindRow(string, int, int, bool, bool, bool, bool)</a> methods).</p>
<p>The default implementation is case-sensitive and takes leading and trailing blanks into account.</p>
<p>If you want to merge cells using a case-insensitive comparison or trimming blanks, 
write a custom class that implements the <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.icomparer">IComparer</a> interface and assign an 
instance of it to the grid's <a class="xref" href="C1.Win.FlexGrid.C1FlexGridBase.CustomComparer.html#C1_Win_FlexGrid_C1FlexGridBase_CustomComparer">CustomComparer</a> property.</p>
<p>Setting this property to null (Nothing in Visual Basic) restores the default behavior.</p>
</div>
<h5 id="C1_Win_FlexGrid_C1FlexGridBase_CustomComparer_examples">Examples</h5>
<p>The code below replaces the built-in comparer with a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.caseinsensitivecomparer">CaseInsensitiveComparer</a>.
This causes the <span class="xref">C1.Win.FlexGrid.C1FlexGridBase.Subtotal(C1.Win.FlexGrid.AggregateEnum,System.Int32,System.Int32,System.Int32,System.Int32,System.String,C1.Win.FlexGrid.AggregateFlags,C1.Win.FlexGrid.RowColFlags)</span> method to group items that differ only in case into the
same groups:</p>
<pre><code class="lang-csharp">// use case-insensitive comparer
flex.CustomComparer = new CaseInsensitiveComparer(); 

// add groups ignoring case
flex.Subtotal(AggregateEnum.Sum, 0, groupOn, totalOn);

// restore default (case-sensitive) comparer
flex.CustomComparer = null;</code></pre>

</div>
