(八十六)c#Winform自定义控件-表格优化-HZHControls
<p class="blogheaddes">出处:https://www.hzhcontrols.cn<br>原文:https://www.hzhcontrols.cn/blog-149.html<br>本文版权归www.hzhcontrols.cn所有<br>欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利</p><p> </p>
<div>
<h1>官网</h1>
<p>https://www.hzhcontrols.cn</p>
<h1>前提</h1>
<p>入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。</p>
<p>GitHub:https://github.com/kwwwvagaa/NetWinformControl</p>
<p>码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git</p>
<p>如果觉得写的还行,请点个 star 支持一下吧</p>
<p>欢迎前来交流探讨: 企鹅群568015492 <img src="http://hzhcontrols.com/upload/image/20191107/1573109710975070.png"></p>
<p>来都来了,点个【推荐】再走吧,谢谢</p>
<h1>NuGet</h1>
<div class="cnblogs_code">
<pre>Install-Package HZH_Controls</pre>
</div>
<h1>目录</h1>
<p>http://www.hzhcontrols.com/blog-63.html</p>
<h1>用处及效果</h1>
<p>因为前面写的表格存在一些问题,本篇文章将对其优化处理,达到以下效果,支持自定义图片和按钮等自定义单元格</p>
<p><img src="http://hzhcontrols.com/upload/image/20191107/1573109710115216.png"></p>
<h1>准备工作</h1>
<p>优化是在原表格基础上做的处理,如果不了解可以移步查看一下</p>
<p>(三十二)c#Winform自定义控件-表格</p>
<h1>开始</h1>
<p>移除UCDataGridView中所有自适应高度相关的功能,移除分页控件</p>
<p>DataGridViewColumnEntity中添加自定义单元格属性</p>
<table class="syntaxhighlighterc#" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="c# spaces"> </code><code class="c# color1">/// <summary></code></div>
<div class="line number2 index1 alt1"><code class="c# spaces"> </code><code class="c# color1">/// 自定义的单元格控件,一个实现IDataGridViewCustomCell的Control</code></div>
<div class="line number3 index2 alt2"><code class="c# spaces"> </code><code class="c# color1">/// </summary></code></div>
<div class="line number4 index3 alt1"><code class="c# spaces"> </code><code class="c# color1">/// <value>The custom cell.</value></code></div>
<div class="line number5 index4 alt2"><code class="c# spaces"> </code><code class="c# keyword">private</code> <code class="c# plain">Type customCellType = </code><code class="c# keyword">null</code><code class="c# plain">;</code></div>
<div class="line number6 index5 alt1"><code class="c# spaces"> </code><code class="c# keyword">public</code> <code class="c# plain">Type CustomCellType</code></div>
<div class="line number7 index6 alt2"><code class="c# spaces"> </code><code class="c# plain">{</code></div>
<div class="line number8 index7 alt1"><code class="c# spaces"> </code><code class="c# keyword">get</code></div>
<div class="line number9 index8 alt2"><code class="c# spaces"> </code><code class="c# plain">{</code></div>
<div class="line number10 index9 alt1"><code class="c# spaces"> </code><code class="c# keyword">return</code> <code class="c# plain">customCellType;</code></div>
<div class="line number11 index10 alt2"><code class="c# spaces"> </code><code class="c# plain">}</code></div>
<div class="line number12 index11 alt1"><code class="c# spaces"> </code><code class="c# keyword">set</code></div>
<div class="line number13 index12 alt2"><code class="c# spaces"> </code><code class="c# plain">{</code></div>
<div class="line number14 index13 alt1"><code class="c# spaces"> </code><code class="c# keyword">if</code> <code class="c# plain">(!</code><code class="c# keyword">typeof</code><code class="c# plain">(IDataGridViewCustomCell).IsAssignableFrom(value) || !value.IsSubclassOf(</code><code class="c# keyword">typeof</code><code class="c# plain">(System.Windows.Forms.Control)))</code></div>
<div class="line number15 index14 alt2"><code class="c# spaces"> </code><code class="c# keyword">throw</code> <code class="c# keyword">new</code> <code class="c# plain">Exception(</code><code class="c# string">"行控件没有实现IDataGridViewCustomCell接口"</code><code class="c# plain">);</code></div>
<div class="line number16 index15 alt1"><code class="c# spaces"> </code><code class="c# plain">customCellType = value;</code></div>
<div class="line number17 index16 alt2"><code class="c# spaces"> </code><code class="c# plain">}</code></div>
<div class="line number18 index17 alt1"><code class="c# spaces"> </code><code class="c# plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
<h1> </h1>
<p>行控件绑定自定义行</p>
<p> </p>
<table class="syntaxhighlighterc#" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="c# spaces"> </code><code class="c# keyword">if</code> <code class="c# plain">(item.CustomCellType == </code><code class="c# keyword">null</code><code class="c# plain">)</code></div>
<div class="line number2 index1 alt1"><code class="c# spaces"> </code><code class="c# plain">{</code></div>
<div class="line number3 index2 alt2"><code class="c# spaces"> </code><code class="c# plain">Label lbl = </code><code class="c# keyword">new</code> <code class="c# plain">Label();</code></div>
<div class="line number4 index3 alt1"><code class="c# spaces"> </code><code class="c# plain">lbl.Tag = i - (IsShowCheckBox ? 1 : 0);</code></div>
<div class="line number5 index4 alt2"><code class="c# spaces"> </code><code class="c# plain">lbl.Name = </code><code class="c# string">"lbl_"</code> <code class="c# plain">+ item.DataField;</code></div>
<div class="line number6 index5 alt1"><code class="c# spaces"> </code><code class="c# plain">lbl.Font = </code><code class="c# keyword">new</code> <code class="c# plain">Font(</code><code class="c# string">"微软雅黑"</code><code class="c# plain">, 12);</code></div>
<div class="line number7 index6 alt2"><code class="c# spaces"> </code><code class="c# plain">lbl.ForeColor = Color.Black;</code></div>
<div class="line number8 index7 alt1"><code class="c# spaces"> </code><code class="c# plain">lbl.AutoSize = </code><code class="c# keyword">false</code><code class="c# plain">;</code></div>
<div class="line number9 index8 alt2"><code class="c# spaces"> </code><code class="c# plain">lbl.Dock = DockStyle.Fill;</code></div>
<div class="line number10 index9 alt1"><code class="c# spaces"> </code><code class="c# plain">lbl.TextAlign = item.TextAlign;</code></div>
<div class="line number11 index10 alt2"><code class="c# spaces"> </code><code class="c# plain">lbl.MouseDown += (a, b) =></code></div>
<div class="line number12 index11 alt1"><code class="c# spaces"> </code><code class="c# plain">{</code></div>
<div class="line number13 index12 alt2"><code class="c# spaces"> </code><code class="c# plain">Item_MouseDown(a, b);</code></div>
<div class="line number14 index13 alt1"><code class="c# spaces"> </code><code class="c# plain">};</code></div>
<div class="line number15 index14 alt2"><code class="c# spaces"> </code><code class="c# plain">c = lbl;</code></div>
<div class="line number16 index15 alt1"><code class="c# spaces"> </code><code class="c# plain">}</code></div>
<div class="line number17 index16 alt2"><code class="c# spaces"> </code><code class="c# keyword">else</code> </div>
<div class="line number18 index17 alt1"><code class="c# spaces"> </code><code class="c# plain">{</code></div>
<div class="line number19 index18 alt2"><code class="c# spaces"> </code><code class="c# plain">Control cc = (Control)Activator.CreateInstance(item.CustomCellType); </code></div>
<div class="line number20 index19 alt1"><code class="c# spaces"> </code><code class="c# plain">cc.Dock = DockStyle.Fill;</code></div>
<div class="line number21 index20 alt2"><code class="c# spaces"> </code><code class="c# plain">c = cc;</code></div>
<div class="line number22 index21 alt1"><code class="c# spaces"> </code><code class="c# plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
<p> </p>
<p>支持基本上就完成了全部的控制了,然后看下调用示例</p>
<table class="syntaxhighlighterc#" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="c# plain">List<DataGridViewColumnEntity> lstCulumns = </code><code class="c# keyword">new</code> <code class="c# plain">List<DataGridViewColumnEntity>();</code></div>
<div class="line number2 index1 alt1"><code class="c# spaces"> </code><code class="c# plain">lstCulumns.Add(</code><code class="c# keyword">new</code> <code class="c# plain">DataGridViewColumnEntity() { Width = 35, WidthType = SizeType.Absolute, CustomCellType = </code><code class="c# keyword">typeof</code><code class="c# plain">(UCTestGridTable_CustomCellIcon) });</code></div>
<div class="line number3 index2 alt2"><code class="c# spaces"> </code><code class="c# plain">lstCulumns.Add(</code><code class="c# keyword">new</code> <code class="c# plain">DataGridViewColumnEntity() { DataField = </code><code class="c# string">"ID"</code><code class="c# plain">, HeadText = </code><code class="c# string">"编号"</code><code class="c# plain">, Width = 70, WidthType = SizeType.Absolute });</code></div>
<div class="line number4 index3 alt1"><code class="c# spaces"> </code><code class="c# plain">lstCulumns.Add(</code><code class="c# keyword">new</code> <code class="c# plain">DataGridViewColumnEntity() { DataField = </code><code class="c# string">"Name"</code><code class="c# plain">, HeadText = </code><code class="c# string">"姓名"</code><code class="c# plain">, Width = 50, WidthType = SizeType.Percent });</code></div>
<div class="line number5 index4 alt2"><code class="c# spaces"> </code><code class="c# plain">lstCulumns.Add(</code><code class="c# keyword">new</code> <code class="c# plain">DataGridViewColumnEntity() { DataField = </code><code class="c# string">"Age"</code><code class="c# plain">, HeadText = </code><code class="c# string">"年龄"</code><code class="c# plain">, Width = 50, WidthType = SizeType.Percent });</code></div>
<div class="line number6 index5 alt1"><code class="c# spaces"> </code><code class="c# plain">lstCulumns.Add(</code><code class="c# keyword">new</code> <code class="c# plain">DataGridViewColumnEntity() { DataField = </code><code class="c# string">"Birthday"</code><code class="c# plain">, HeadText = </code><code class="c# string">"生日"</code><code class="c# plain">, Width = 50, WidthType = SizeType.Percent, Format = (a) => { </code><code class="c# keyword">return</code> <code class="c# plain">((DateTime)a).ToString(</code><code class="c# string">"yyyy-MM-dd"</code><code class="c# plain">); } });</code></div>
<div class="line number7 index6 alt2"><code class="c# spaces"> </code><code class="c# plain">lstCulumns.Add(</code><code class="c# keyword">new</code> <code class="c# plain">DataGridViewColumnEntity() { DataField = </code><code class="c# string">"Sex"</code><code class="c# plain">, HeadText = </code><code class="c# string">"性别"</code><code class="c# plain">, Width = 50, WidthType = SizeType.Percent, Format = (a) => { </code><code class="c# keyword">return</code> <code class="c# plain">((</code><code class="c# keyword">int</code><code class="c# plain">)a) == 0 ? </code><code class="c# string">"女"</code> <code class="c# plain">: </code><code class="c# string">"男"</code><code class="c# plain">; } });</code></div>
<div class="line number8 index7 alt1"><code class="c# spaces"> </code><code class="c# plain">lstCulumns.Add(</code><code class="c# keyword">new</code> <code class="c# plain">DataGridViewColumnEntity() { Width = 155, WidthType = SizeType.Absolute,CustomCellType=</code><code class="c# keyword">typeof</code><code class="c# plain">(UCTestGridTable_CustomCell) });</code></div>
<div class="line number9 index8 alt2"><code class="c# spaces"> </code><code class="c# keyword">this</code><code class="c# plain">.ucDataGridView1.Columns = lstCulumns;</code></div>
<div class="line number10 index9 alt1"><code class="c# spaces"> </code><code class="c# keyword">this</code><code class="c# plain">.ucDataGridView1.IsShowCheckBox = </code><code class="c# keyword">true</code><code class="c# plain">;</code></div>
<div class="line number11 index10 alt2"><code class="c# spaces"> </code><code class="c# plain">List<</code><code class="c# keyword">object</code><code class="c# plain">> lstSource = </code><code class="c# keyword">new</code> <code class="c# plain">List<</code><code class="c# keyword">object</code><code class="c# plain">>();</code></div>
<div class="line number12 index11 alt1"><code class="c# spaces"> </code><code class="c# keyword">for</code> <code class="c# plain">(</code><code class="c# keyword">int</code> <code class="c# plain">i = 0; i < 50; i++)</code></div>
<div class="line number13 index12 alt2"><code class="c# spaces"> </code><code class="c# plain">{</code></div>
<div class="line number14 index13 alt1"><code class="c# spaces"> </code><code class="c# plain">TestGridModel model = </code><code class="c# keyword">new</code> <code class="c# plain">TestGridModel()</code></div>
<div class="line number15 index14 alt2"><code class="c# spaces"> </code><code class="c# plain">{</code></div>
<div class="line number16 index15 alt1"><code class="c# spaces"> </code><code class="c# plain">ID = i.ToString(),</code></div>
<div class="line number17 index16 alt2"><code class="c# spaces"> </code><code class="c# plain">Age = 3 * i,</code></div>
<div class="line number18 index17 alt1"><code class="c# spaces"> </code><code class="c# plain">Name = </code><code class="c# string">"姓名——"</code> <code class="c# plain">+ i,</code></div>
<div class="line number19 index18 alt2"><code class="c# spaces"> </code><code class="c# plain">Birthday = DateTime.Now.AddYears(-10),</code></div>
<div class="line number20 index19 alt1"><code class="c# spaces"> </code><code class="c# plain">Sex = i % 2</code></div>
<div class="line number21 index20 alt2"><code class="c# spaces"> </code><code class="c# plain">};</code></div>
<div class="line number22 index21 alt1"><code class="c# spaces"> </code><code class="c# plain">lstSource.Add(model);</code></div>
<div class="line number23 index22 alt2"><code class="c# spaces"> </code><code class="c# plain">}</code></div>
<div class="line number24 index23 alt1"><code class="c# spaces"> </code><code class="c# keyword">this</code><code class="c# plain">.ucDataGridView1.DataSource = lstSource;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
<h1>最后的话</h1>
<p>如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星星吧</p>
</div>
</div>
<div id="MySignature" role="contentinfo">
<div style="display: block" id="MySignature"><p style="background: rgb(230, 250, 230); padding: 10px 10px 10px 10px; border: 1px dashed rgb(224, 224, 224); font-family: 微软雅黑; font-size: 13px; text-indent: 0em">
作者:冰封一夏
<br>
出处:http://www.cnblogs.com/bfyx/
<br>
HZHControls官网:http://www.hzhcontrols.cn
<br>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,
<br>且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
<br>
GitHub:https://github.com/kwwwvagaa/NetWinformControl
<br>
码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
</p>
</div><br><br>
来源:https://www.cnblogs.com/bfyx/p/11812170.html
頁:
[1]