使用DevExpress 控件开发通用查询控件(Winform)

C# DevExpress中GridControl控件的基本属性设置和使用方法(1) C# DevExpress中GridControl控件的基本属性设置和使用方法 阅读详情

来自:http://www.cnblogs.com/fengmazi/archive/2011/11/18/2254760.html

首先感谢我以前的组长--志远,他教会了我很多很多东西,他的责任心,他的为人处事让我深深敬佩,

       在我们所有项目中,有一个功能是必不可少的,那就是查询,不同的需求,需要不同的查询条件,查询条件的设计也是千奇百怪,有时我就想,有没有一种通用的查询控件呢,这样,我们就不需要千篇一律写相同的代码,充分发挥代码的可重用性。

        一个查询功能有三个必要条件,一个标题,一个输入控件,一个查询按钮,复杂的我就不在列举了,只有想不到的,没有做不到的。

        如果要实现一个通用的查询功能,有几个前提必须明白

        1)什么是通用,在我的理解是,可以适合不同的需求。

        2)输入控件得包含基本的数据类型,如整形,浮点类型,日期,复制框,下拉列表。。。。。当然也有人说,他只输入一个文本框就行了,什么东西都可以输入,如果你这样想,下面的内容无需再看,这种牛人地球人都无法阻止他了,我更伤不起。

        3)多语言的支持,此文不会涉及到,在本人项目中已实现些了功能,我想大家会有很好的办法实现

        4)安全,而无需自己添加安全机制,如防SQL注入。

先上效果图,如果有不足之处,还需大家提点,小人不才,不是做得非常完美。

效果0效果1(下拉列表)

效果2(日期)效果3(GridLookUpEdit)

效果4(PopEdit)

 

环境配置

        开发工具:VS2010,.NET Framework4.0,DXperience-10.2.5

        1.先从创建项目开始:创建解决方案(Com),创建类库项目(QueryLibrary),接着创建Window窗口应用程序(ControlQueryText)此项目用于测试

        2.在库类Control添加用户控件ControlQuery.cs,界面布局如下图

界面布局

        3.下面开始编写代码了,定义输入框所支持的数据类型,使用枚举类型

?
1
2
3
4
5
6
7
8
9
10
11
public  enum  ControlType
         {
             TextEdit=0, //普通文本框
             SpinEdit=1, //数字类型输入框
             ComboBox=2, //下拉列表
             DateTime=3, //日期类型
             ButtonEdit=4, //XX类型,文本框边有个按钮,点击它弹出一个自定义窗口,在自定义窗口输入或选择要输入的条件
             GridLookUpEdit= 5, //XX类型,点击弹出GridControl列表,在里面选择一行或多行数据作为输入条件
             MemoExEdit= 6, //XX类型,是一个多行文本控件,可以输入多个值,以“,”,“;”,“空格”分界
             PopEdit = 7 //XX类型,输入自定义DataTable,GridControl,Control
         }

 

       4.定义一个条件的数据结构DataSources,从左到右依次为:连接符(and 或者 or)左括号,提示符,判断符(=,<,>,<>,like,in等),右括号

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public  delegate  object  DelegateEditMethod();
public  delegate  void  DelegateReturnControl( object  control);
public  struct  DataSources
{
     public  string  description { get ; set ; } //条件显示名
     public  object  value { get ; set ; } //条件值
     public  ControlType controlType { get ; set ; } //控件类型
     public  bool  defaultSelect { get ; set ; } //是否默显示此条件
     public  string  defaultOperator { get ; set ; } //默认连接符
     public  object  defaultValue { get ; set ; } //默认值
     public  IList<KeyValuePair < string , object >> selectDataSource { get ; set ; } //选择项的数据源,如下拉列表之类的
     public  string [] group { get ; set ; } //分组  个人感觉这个没有多少意义
     public  bool  fixedLine { get ; set ; } //指定不能删除的条件
     public  DelegateEditMethod editMethod; //委托方法
     public  DelegateReturnControl returnControl; //委托控件
}

        4.定义查询结果集类FilterItem

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public  class  FilterItem
         { 
             /// <summary>
             /// 判斷符  And  或  Or
             /// </summary>
             public  string  Logical { get ; set ; }
             /// <summary>
             /// 左括號
             /// </summary>
             public  string  LeftParentheses { get ; set ; }
             /// <summary>
             /// 字段
             /// </summary>
             public  string  Column { get ; set ; }
             /// <summary>
             /// 連接符  如: =
             /// </summary>
             public  string  Operator { get ; set ; }
             /// <summary>
             /// 值
             /// </summary>
             public  string  Value { get ; set ; }
             /// <summary>
             /// 右括號
             /// </summary>
             public  string  RigthParentheses { get ; set ; }
             /// <summary>
             /// 所属组
             /// </summary>
             public  string [] group { get ; set ; }
             /// <summary>
             /// 得到参数名
             /// </summary>
             public  string  ParameterName { get ; set ; }
         }

          5,定义FilterItem集合,实现IEnumerable,IEnumerator ,并提供一般基础方法如 Add,RemoveAt,Clear,得到sql脚本,以Parameter形式的sql脚本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
public  class  Filter:IEnumerable,IEnumerator
         {
             private  int  index=-1;
             private  List<FilterItem> Filters;
             public  int  Length
             {
                 get
                 {
                     if  (Filters == null )
                     {
                         return  0;
                     }
                     return  Filters.Count;
                 }
             }
             /// <summary>
             /// 是否出错   false :出错 , true :未出错
             /// </summary>
             public  bool  isError { get ; set ; }
             /// <summary>
             /// 出错描述语言
             /// </summary>
             public  string  Error { get ; set ; }
             public  FilterItem this [ int  index]
             {
                 get
                 {
                     if  (Filters== null || index < 0 || index > Filters.Count)
                     {
                         return  null ;
                     }
                     else
                     {
                         return  Filters[index];
                     }
                 }
                 set
                 {
                     if  (!(index < 0 || index <= Filters.Count) && Filters!= null )
                     {
                         Filters[index] = value;
                     }
                 }
             }
             public  FilterItem this [ string  columnsName]
             {
                 get
                 {
                     if  (Filters == null  || columnsName == null  || columnsName== "" )
                     {
                         return  null ;
                     }
                     else
                     {
                         return  Filters.Find( delegate (FilterItem filter)
                         {
                             return  (filter.Column == columnsName);
                         });
                     }
                 }
                 set
                 {
                     if  (Filters != null  && columnsName != null  && columnsName != "" )
                     {
                         FilterItem filteritem=Filters.Find( delegate (FilterItem filter)
                         {
                             return  (filter.Column == columnsName);
                         });
                         filteritem = value;
                     }
                 }
             }
             public  IEnumerator GetEnumerator()
             {
                 return  (IEnumerator) this ;
             }
             public  object  Current
             {
                 get  { return  Filters[index]; }
             }
             public  bool  MoveNext()
             {
                 index++;
                 return  index >= Filters.Count ? false  : true ;
             }
             public  void  Reset()
             {
                 index = -1;
             }
             #region  一般方法
             public  void  Add(FilterItem filterItem)
             {
                 if  (Filters == null )
                 {
                     Filters = new  List<FilterItem>();
                 }
                 Filters.Add(filterItem);
             }
             public  void  RemoveAt( int  index)
             {
                 if  (Filters != null )
                 {
                     Filters.RemoveAt(index);   
                 }                          
             }
             public  void  RemoveAt(FilterItem filterItem)
             {
                 if  (Filters != null  && filterItem!= null )
                 {
                     Filters.Remove(filterItem);
                 }
             }
             public  void  Clear()
             {
                 if  (Filters != null )
                 {
                     Filters.Clear();
                 }
             }
             public  List<FilterItem> FindGroup( string  group)
             {
                 List<FilterItem> groupFilterItem=Filters.FindAll( delegate (FilterItem filter)
                 {
                     for  ( int  i = 0; i < filter.group.Length; i++)
                     {
                         if  (filter.group[i] == group)
                             return  true ;
                     }
                     return  false ;
                 });
                 return  groupFilterItem;
             }
             #endregion
             /// <summary>
             /// 得到查询字符串
             /// </summary>
             /// <returns></returns>
             public  override  string  ToString()
             {
                 StringBuilder str = new  StringBuilder();
                 if  (Filters == null )
                     return  "" ;
                 foreach  (FilterItem item in  Filters)
                 {
                     str.Append( " "  + item.Logical);
                     str.Append( " "  +item.LeftParentheses);
                     str.Append( " "  + item.Column);
                     str.Append( " "  + item.Operator);
                     str.Append( " "  + item.Value);
                     str.Append( " "  +item.RigthParentheses);
                 }
                 return  str.ToString();
             }
             /// <summary>
             /// 得到分组的查询字符串
             /// </summary>
             /// <param name="group">组名</param>
             /// <returns></returns>
             public   string  ToGroupString( string  group)
             {
                 StringBuilder str = new  StringBuilder();
                 if  (Filters == null )
                     return  "" ;
                 List<FilterItem> groupFilterItem = FindGroup(group);
                 foreach  (FilterItem item in  groupFilterItem)
                 {
                     str.Append( " "  + item.Logical);
                     str.Append( " "  + item.LeftParentheses);
                     str.Append( " "  + item.Column);
                     str.Append( " "  + item.Operator);
                     str.Append( " "  + item.Value);
                     str.Append( " "  + item.RigthParentheses);                       
                 }
                 return  str.ToString();
             }           
             /// <summary>
             /// 得到参数查询字符串    如    and Id=@Id   如果有   .   换为  _  
             /// </summary>
             /// <returns></returns>
             public  string  ToParameterString()
             {
                 StringBuilder str = new  StringBuilder();
                 if  (Filters == null )
                     return  "" ;
                 foreach  (FilterItem item in  Filters)
                 {
                     str.Append( " "  + item.Logical);
                     str.Append( " "  + item.LeftParentheses);
                     str.Append( " "  + item.Column);
                     str.Append( " "  + item.Operator);
                     str.Append( " @"  + item.ParameterName);
                     str.Append( " "  + item.RigthParentheses);
                 }
                 return  str.ToString();
             }
         }

         6.定义自定义查询事件,在调用控件方触发

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public  event  btnSearchHandle SearchClick;
         public  delegate  void  btnSearchHandle( object  sender, SearchEventArgs e);
         public  class  SearchEventArgs : EventArgs
         {
             private  Filter filter;
             public  SearchEventArgs(Filter _filter)
             {
                 this .filter = _filter;
             }
             public  Filter Filter
             {
                 get  { return  filter; }
             }
             /// <summary>
             /// 此方法还需要改进  返回值应该是 Filter 类,而不是  List<FilterItem> 泛型
             /// </summary>
             /// <param name="group"></param>
             /// <returns></returns>
             public  List<FilterItem> GetGroup( string  group)
             {
                 return   filter.FindGroup(group);
             }
         }

       7拼接查询字符串

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#region   拼接查询字符串
         private  Filter GetItemControl()
         {
             Control c = mainPanelControl;
             string  strlogical = "" ;
             string  strleftParentheses= "" ;
             string  strColumn = "" ;
             string  strOperator = "" ;
             string  strValue = "" ;
             string  strrigthParentheses = "" ;
             Filter filter = new  Filter();
             filter.isError= true ;
             filter.Error = "" ;
             for  ( int  i = c.Controls.Count - 1; i >-1; i--)
             {
                 if  (c.Controls[i] is  DevExpress.XtraEditors.PanelControl)
                 {
                     if  (c.Controls[i].BackColor == System.Drawing.Color.Red)
                         c.Controls[i].BackColor = c.Controls[i].Parent.BackColor;
                     Control.ControlCollection controlCollection = c.Controls[i].Controls;
                     ComboBoxEdit txtLogical = controlCollection[2] as  ComboBoxEdit;
                     ComboBoxEdit txtLeftParentheses = controlCollection[3] as  ComboBoxEdit;
                     ComboBoxEdit txtRightParentheses = controlCollection[4] as  ComboBoxEdit;
                     ImageComboBoxEdit txtColumn0 = controlCollection[0] as  ImageComboBoxEdit;
                     ComboBoxEdit txtOperator = controlCollection[1] as  ComboBoxEdit;
                     TextEdit txtValue0 = controlCollection[6] as  TextEdit;
                     
                     if  (txtColumn0.EditValue == null  || string .IsNullOrEmpty(txtColumn0.EditValue.ToString()))
                     {
                         continue ;
                     }
                     if  (txtLogical.EditValue == null  || string .IsNullOrEmpty(txtLogical.EditValue.ToString()) ||
                         txtOperator.EditValue == null  || string .IsNullOrEmpty(txtOperator.EditValue.ToString()))                       
                     {
                         //filter.Clear();
                         //filter.isError = false;
                         //filter.Error += "Column \"" + ((DevExpress.XtraEditors.Controls.ImageComboBoxItem)txtColumn0.SelectedItem).Description + "\" no value," + System.Environment.NewLine;
                         //c.Controls[i].BackColor = System.Drawing.Color.Red;
                         //txtValue0.EditValue == null || string.IsNullOrEmpty(txtValue0.EditValue.ToString()
                         continue ;
                     }
                     if  (txtValue0 == null )
                     {
                         if  (controlCollection[6] is  PopEditColumns)
                         {
                             PopEditColumns aa = controlCollection[6] as  PopEditColumns;
                             if  (aa.GetSelectRow( false ) == null )
                             {
                                 continue ;
                             }
                         }
                         else
                         {
                             continue ;
                         }
                     }
                     else  if  (txtValue0.EditValue == null )
                     {
                         continue ;
                     }
 
                     strlogical = txtLogical.EditValue.ToString();
                     strleftParentheses = txtLeftParentheses.EditValue.ToString();
                     strColumn = txtColumn0.EditValue.ToString();
                     strOperator = txtOperator.EditValue.ToString();
                     if (txtValue0!= null )
                         strValue = txtValue0.EditValue.ToString().Replace( "'" , "''" );
                     strrigthParentheses = txtRightParentheses.EditValue.ToString();
 
                     FilterItem filterItem = new  FilterItem();
                     filterItem.Logical = strlogical;
                     filterItem.LeftParentheses = strleftParentheses;
                     filterItem.Column = strColumn;
                     filterItem.Operator = strOperator;
                     filterItem.ParameterName = "ParameterName_"  + i.ToString();
                     if  (controlCollection[6] is  PopEditColumns)
                     {
                         StringBuilder str = new  StringBuilder();
                         PopEditColumns controlColumns = controlCollection[6] as  PopEditColumns;
                         List<DataRow> dr = controlColumns.GetSelectRow( false );
                         if  (dr == null  || dr.Count == 0) continue ;
                         string [] keyname = filterItem.Column.Split( '/' );
                         foreach  (DataRow item in  dr)
                         {
                             str.Append( " or " );
                             bool  temp = true ;
                             for  ( int  j = 0; j < keyname.Length; j++)
                             {                              
                                 if  (String.IsNullOrEmpty(keyname[j]))
                                     continue ;
                                 string [] columns = keyname[j].Split( ':' );
 
                                 if  (item[columns[0]] == null )
                                     continue ;
                                 if  (temp)
                                 {
                                     str.Append(columns[1] + "='"  + item[columns[0]].ToString() + "'" );
                                     temp = false ;
                                 }
                                 else
                                 {
                                     str.Append( " and "  + columns[1] + "='"  + item[columns[0]].ToString() + "'" );
                                 }
                             }
                         }
                         str = str.Remove(0, 4).Insert(0, " (" ).Insert(str.Length, ") " );
                         filterItem.Column = "" ;
                         filterItem.Operator = "" ;
                         filterItem.Value = str.ToString();
                     }
                     else
                     {
                         if  (txtValue0 is  DevExpress.XtraEditors.SpinEdit)
                         {
                             filterItem.Value = strValue;
                         }
                         else  if  (txtValue0 is  DevExpress.XtraEditors.DateEdit)
                         {
                             DateTime valuedate = new  DateTime();
                             DateTime.TryParse(strValue, out  valuedate);
                             filterItem.Value = strValue;
                             if  (filterItem.Operator == "<"  || filterItem.Operator == "<=" )
                             {
                                 filterItem.Value = "convert(datetime,'"  + valuedate.ToString( "yyyy-MM-dd 23:59:59.999" ) + "')" ;
                             }
                             else  if  (filterItem.Operator == ">"  || filterItem.Operator == ">=" )
                             {
                                 filterItem.Value = "convert(datetime,'"  + valuedate.ToString( "yyyy-MM-dd 00:00:00.000" ) + "')" ;
                             }
                             else  if  (filterItem.Operator == "=" )
                             {
                                 filterItem.Operator = " between " ;
                                 filterItem.Value = "convert(datetime,'"  + valuedate.ToString( "yyyy-MM-dd 00:00:00.000" ) + "')"  + " and  "  + "convert(datetime,'"  + valuedate.ToString( "yyyy-MM-dd 23:59:59.999" ) + "')" ;
                             }
                             else
                             {
                                 filterItem.Value = "convert(datetime,'"  + valuedate + "')" ;
                             }
                         }
                         else  if  (txtValue0 is  DevExpress.XtraEditors.MemoExEdit)
                         {
                             if  (strOperator == "in" )
                             {
                                 //分隔符  ",",";" "换行"              
                                 //string[] split = strValue.Split(new string[] { ",", ";", System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                                 strValue = strValue.Replace( "," , "','" ).Replace( ";" , "','" ).Replace(System.Environment.NewLine, "','" );
                                 filterItem.Value = "('"  + strValue + "')" ;
                             }
                             else
                                 filterItem.Value = " '"  + strValue + "'" ;
                         }
                         else
                         {
                             if  (strOperator == "in" )
                                 filterItem.Value = "("  + strValue + ")" ;
                             else
                                 filterItem.Value = " '"  + strValue + "'" ;
                         }
                     }
                     filterItem.RigthParentheses = strrigthParentheses;
                     filter.Add(filterItem);
                 }
             }
             return  filter;
         }
         #endregion

 

主要方法在这了,并附上源码,里面包含测试用例,下载源码



WINFORM - DevExpress -> DevExpress总结[安装、案例] 由于版权限制,目前该博客设置成转载形式(引用其他资源太多,但还是想和大家分享) 阅读详情

相关推荐

Winform分页控件实现普通版、DotNetBar、DevExpress三大版本整合

在Winform开发中,一直离不开分页处理,好的分页控件封装,能为开发节省很多时间和繁琐工作,对分页控件一直的改进和完善,也是我的兴趣之一。本次主要实现对分页控件的全面重构,优化功能及界面的处理,并统一完成普通版、基于DotNetbar界面控件版本、DevExpress界面控件版本三大版本的发布,这几个界面版本,除了界面表现效果不一样外,所有的功能展示及使用代码完全一致,保证用户的知识投资及给客户

Kelvin峰 1万+

DevExpress控件LookUpEdit、GridControl、RibbonControl的使用总结

if (3 == fieldIndex && station < segment.Fields[fieldIndex - 1].FieldMax)//如果改变的是结束里程。原文链接:https://blog.youkuaiyun.com/duanzi_peng/article/details/78343749。offsetRow.Properties.Caption = "偏移量(米)";原文链接:https://blog.youkuaiyun.com/twenwen/article/details/50835226。

qq_18932003的博客 1088

DevExpress WinForm开发实战:从核心控件到企业级应用构建

在C#桌面应用开发领域,UI框架的选择直接影响开发效率和最终用户体验。企业级应用通常需要处理复杂的数据交互、高性能的数据展示以及现代化的界面设计,这要求框架不仅提供丰富的控件库,还需具备强大的数据绑定机制和灵活的布局系统。DevExpress WinForm作为一套成熟的商业控件套件,通过其GridControl、LayoutControl等核心组件,实现了海量数据的流畅展示与高度可定制的界面布局,有效解决了原生WinForm在性能与美观上的瓶颈。其数据绑定机制支持实时UI更新,结合皮肤系统与模块化设计,能

weixin_34205826的博客 462

关于devexpress的gridcontrol里显示搜索框,与foot部分的统计

1,显示搜索框:在 views下面 选中 optionsView 选中 showautofilterrow = true 2.显示foot部分统计表 optionsView 选中 showfooter= true 在对应的列中选中:summaryitem 在summaryType中选中sum。 ...

weixin_40029679的博客 3923

Winform中使用DevExpress的CheckEdit控件实现多选条件搜索

场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/100061243 安装完DevExpress后,实现一个可以选择多个条件的搜索功能,效果如下 实现 新建一个窗体,拖拽checkEdit控件和textEdit控件,使页面布局如下 ...

BADAO_LIUMANG_QIZHI的博客 923

DevExpress WinForm控件使用指南中文版

DevExpress WinForms 控件集为开发人员提供了一套功能强大的工具,用于快速创建专业的桌面应用程序。通过丰富的界面元素,开发者可以实现各种复杂的功能,从而提高最终用户的生产力。控件集包括了数据网格、报表、图表、 Ribbon 界面等多种组件,每一种都有其独特的功能和定制选项,使得用户可以针对具体需求,调整控件的外观和行为。本章将介绍DevExpress WinForms 控件集的基本功能和特点,为您在后续章节中深入了解和使用特定控件打下基础。

weixin_36178216的博客 1524

在DevExpress程序中使用PopupContainerEdit和PopupContainer实现数据展示

在一些数据的即时查询场景中,我们可能需要对输入信息进行模糊查询并进行选择,例如在一些文本输入场景,如输入某个站点编码或者设备编码,然后获取符合的列表供用户选择的场景,本篇随笔介绍在DevExpress程序中使用PopupContainerEdit和PopupContainer实现数据展示。 1、回顾SearchLookupEdit控件使用 在DevExpress中,我们如果需要好的体验效果也可...

weixin_30505751的博客 519

AS7341光谱传感器实战:如何用STM32F103精准测量环境色温(附完整代码)

本文详细介绍了如何使用STM32F103驱动AS7341光谱传感器实现环境色温的精准测量。从硬件连接到驱动开发,再到色温计算算法的实现,提供了完整的代码示例和优化建议,帮助开发者在智能照明、农业监测等领域快速应用AS7341进行高精度色温检测。

weixin_30352645的博客 476

devexpress 使用PopupContainerEdit和PopupContainer实现实时数据查询并展示

实测可行 #region 使用PopupContainerEdit和PopupContainer实现数据展示!!! /// <summary> /// 设置一个标识,是否在GridView中可以接受回车键 /// </summary> bool canAcceptReturn = false; private void popupContainerEdit1_KeyPress(object sende...

qq_18932003的博客 1042

飞傲Fiio+foobar2000 实现dsd解码+灯正常显示

飞傲Fiio+foobar2000 实现dsd解码+灯正常显示。安装后可将DSD格式的数据通过ASIO驱动传输至DAC。安装后可识别DAC的ASIO驱动。安装后可识别DSD文件。

yanlei7993的博客 2301

Disk Drill 使用教程

Disk Drill只需单击几下,即可恢复USB闪存驱动器上已删除的数据,包括丢失的照片,文档和其他文件类型。Disk Drill是真正的多合一应用程序,可在Mac上恢复闪存驱动器。Disk Drill将自动应用最佳的笔式驱动器恢复算法来恢复Mac数据。 USB闪存驱动器是一种传输和存储信息的好方法,但是如果错误地丢失或删除了存储在其中的文件,会发生什么呢?当您需要Mac的闪存驱动器数据恢复软件时,Disk Drill是您的最佳选择。Disk Drill将扫描您的USB闪存驱动器(也称为笔式驱动器)并查找

zjj778899的博客 1万+

提高DevExpress winform 控件加载速度

提高DevExpress winform 控件加载速度 2015年12月25日 13:33:42费玉清阅读数 6780 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.youkuaiyun.com/bk8897/article/details/50402614 devexpress 控件功能很强大 但是有...

cxu123321的博客 3980

Ubuntu安装opencv4.5(自己安装过程详细)

1.下载opencv 在opencv官网下载source版,下载链接 http://opencv.org/releases.html。别下载错版本 下载过程就不多说了。 2.安装过程 2.1解压 unzip opencv-4.5.0.zip cd opencv-4.5.0 2.2安装依赖的库 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-

weixin_45629790的博客 1万+

在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一般在Winform开发中根据情况混合使用这些控件,不过整体来看,基于DevExpress的TreeList和TreeListLookupEdit表现相对比较好看一些,本篇随笔主要介绍这两个控件在实际W...

weixin_30692143的博客 960

OpenClaw 源代码深度分析报告 &如何把企业自有的MCP server 工具集成到OpenClaw里? 怎样通过OpenAI 风格SDK 解析出来OpenClaw的全部的流式输出内容?

项目属性详情名称OpenClaw版本2026.3.2许可证MIT语言最低运行时包管理器pnpm主要仓库},// 注册工具// 工具实现},});// 注册命令" }),});},方面评价模块化设计⭐⭐⭐⭐⭐ 插件架构清晰,扩展性强协议设计⭐⭐⭐⭐⭐ WebSocket 协议完善,支持多种客户端多渠道支持⭐⭐⭐⭐⭐ 20+ 消息通道,覆盖主流平台安全机制⭐⭐⭐⭐ 配对认证、设备签名、权限控制完善本地优先⭐⭐⭐⭐⭐ 数据本地存储,用户完全控制项目属性详情名称OpenClaw版本。

AI天才研究院 935

使用STARTER V5.6软件将项目文件下载到S120驱动器控制单元CF卡中的具体方法演示

使用STARTER V5.6软件将项目文件下载到S120驱动器控制单元CF卡中的具体方法演示

Robot_PLC_HMI_Automation 1912

dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一般在Winform开发中根据情况混合使用这些控件,不过整体来看,基于DevExpress的TreeList和TreeListLookupEdit表现相对比较好看一些,本篇随笔主要介绍这两个控件在实际W...

weixin_39794340的博客 733

PX4从放弃到精通(十一):混控及PWM输出

文章目录前言一、混控脚本二、使用步骤1.引入库2.读入数据总结 前言 一个人可以走的更快,一群人才能走的更远,交流学习加qq:2096723956 更多保姆级PX4+ROS学习视频:https://b23.tv/ZeUDKqy 分享知识,传递正能量,如有疏漏或不当之处,恳请指出. 一、混控脚本 混控脚本定义了不同 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pand

超维空间科技的博客 1万+

DevExpress控件 LookupEdit 模糊查询

LookupEdit 的具体设置 //单击回车按钮跳转下一个控件 this.lookUpEdit1.EnterMoveNextControl = true; //添加一个按钮,类型选择Delete,用来删除选中项 this.lookUpEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.E

云海之上 6872

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58= GetFlowDropDown SQL注入

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58=、eHR/OA一体化智慧云平台、智慧一卡通云平台、行业软件开发与定制、智慧企业管理信息化咨询与项目服务为核心业务的顾问式管理咨询和软件个性定制开发的高科技股份集团公司。同鑫T9eHR信息华管理系统存在SQL注入漏洞,攻击者可通过该漏洞上传shell。关闭互联网暴露面或接口设置访问权限。利用sqlmap进行shell。

iSee857的博客 698

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

总结开发中基于DevExpress的Winform界面效果

DevExpress是一家全球知名的控件开发公司,DevExpress 也特指此公司出品的控件集合或某系列控件或其中某控件。我们应用最为广泛的是基于Winform的DevExpress控件组,本篇随笔主要总结笔者在Winform开发框架中应用到的各种基于DevExpress的Winform界面效果。 1、SplashScreen控件若南小说网 https://www.2271.info 我们在开发桌面应用程序的时候,由于程序启动比较慢或者展示公司产品Logo,往往为了提高用户的体验,增加一个闪屏,也就是..

weixin_57699483的博客 1258

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WinForm应用实战开发指南 - 如何用DevExpress实现表格列表内容分组展示?

本文主要介绍在Winform开发中如何利用DevExpress的GridView实现表格列表内容分组展示,欢迎下载最新版工具体验!

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 887

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WinForm应用界面开发实战 - 如何使用DevExpress内置图标资源?

本文将为大家介绍在WinForm开发框架中如何使用DevExpress的内置图标资源,欢迎下载相关组件体验!

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1259

分享!DevExpress Winform控件界面效果实现总结!(Part 2)

DevExpress是一家全球知名的控件开发公司,DevExpress也特指此公司出品的控件集合或某系列控件或其中某控件。我们应用最为广泛的是基于DevExpress Winform控件组,本文主要总结笔者在Winform开发框架中应用到的各种基于DevExpress Winform界面效果。 点击获取DevExpress Winform控件最新版 DevExpress技术交流群4:715863792欢迎一起进群讨论 7. GridControl样式控制 通过控制GridControl...

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1647
上一篇: Lucene.Net ultra fast search for MVC or WebForms site => made easy!
下一篇: iBATIS.net调用存储过程--(推荐--arvin)
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值