datagridview绑定与详细说明 (搜集)

  1、实现一个用于处理数据库教程数据检索的详细信息的方法。

  下面的代码示例实现一个 getdata 方法,该方法对一个 sqldataadapter 组件进行初始化,并使用该组件填充 datatable。

 然后,将 datatable 绑定到 bindingsource 组件。请确保将 connectionstring 变量的值设置为与数据库相应的值。 

 1  private void getdata(string selectcommand) 
 2  {     
 3       try      
 4        {         
 5  string connectionstring =   "integrated security=sspi;persist security info=false;" + "initial catalog=northwind;data source=localhost";          dataadapter = new sqldataadapter(selectcommand, connectionstring);           
 6 sqlcommandbuilder commandbuilder = new sqlcommandbuilder(dataadapter);           
 7 datatable table = new datatable();
 8 table.locale = system.globalization.cultureinfo.invariantculture;          dataadapter.fill(table);         
 9  bindingsource1.datasource = table;           datagridview1.autoresizecolumns(             datagridviewautosizecolumnsmode.allcellsexceptheader);      
10       }     
11  catch (sqlexception)      
12       {     messagebox.show("to run this example, replace the value of the " +              "connectionstring variable with a connection string that is " +              "valid for your system.");      
13       } 
14 }
View Code

 

  2、在窗体的 load 事件处理程序中,将 datagridview 控件绑定到 bindingsource 组件,并调用 getdata 方法从数据库中检索数据  

1 private void form1_load(object sender, system.eventargs e)  
2 {      
3  datagridview1.datasource = bindingsource1;     
4  getdata("select * from customers");  
5 }  
View Code

 

① 取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判断新增行 ⑤ 行的用户删除操作的自定义 ⑥ 行、列的隐藏和删除 ⑦ 禁止列或者行的resize ⑧ 列宽和行高以及列头的高度和行头的宽度的自动调整 ⑨ 冻结列或行 ⑩ 列顺序的调整 ? 行头列头的单元格 ? 剪切板的操作 ? 单元格的tooltip的设置 ? 右键菜单(contextmenustrip)的设置 ? 单元格的边框、 网格线样式的设定 ? 单元格表示值的设定 ? 用户输入时,单元格输入值的设定 ? 设定新加行的默认值   ① datagridview  取得或者修改当前单元格的内容:   go to top   当前单元格指的是 datagridview 焦点所在的单元格,它可以通过 datagridview 对象的 currentcell 属性取得。如果当前单元格不存在的时候,返回nothing(c#是null)

 [vb.net]  ' 取得当前单元格内容  console.writeline(datagridview1.currentcell.value)  ' 取得当前单元格的列 index  console.writeline(datagridview1.currentcell.columnindex)  ' 取得当前单元格的行 index  console.writeline(datagridview1.currentcell.rowindex)  

[c#]  // 取得当前单元格内容  console.writeline(datagridview1.currentcell.value);  // 取得当前单元格的列 index  console.writeline(datagridview1.currentcell.columnindex);

 // 取得当前单元格的行 index  console.writeline(datagridview1.currentcell.rowindex);   另外,使用 datagridview.currentcelladdress 属性(而不是直接访问单元格)来确定单元格所在的行:datagridview.currentcelladdress.y 和列: datagridview.currentcelladdress.x 。这对于避免取消共享行的共享非常有用。   当前的单元格可以通过设定 datagridview 对象的 currentcell 来改变。可以通过 currentcell 来设定  datagridview 的激活单元格。将 currentcell 设为 nothing(null) 可以取消激活的单元格。   [vb.net]  ' 设定 (0, 0)  为当前单元格  datagridview1.currentcell = datagridview1(0, 0)  

[c#]  // 设定 (0, 0)  为当前单元格  datagridview1.currentcell = datagridview1[0, 0];  在整行选中模式开启时,你也可以通过 currentcell 来设定选定行。         

 1 /**//// <summary>         
 2 /// 向下遍历          
 3 /// </summary>          
 4 /// <param name="sender"></param>         
 5 /// <param name="e"></param>          
 6 private void button4_click(object sender, eventargs e)          ...
 7 {              
 8 int row = this.datagridview1.currentrow.index + 1;              
 9 if (row > this.datagridview1.rowcount - 1)                  
10 row = 0;              
11 this.datagridview1.currentcell = this.datagridview1[0,row];         
12  }           /**
13  <summary>          
14 /// 向上遍历          
15 /// </summary>          
16 /// <param name="sender"></param>          
17 /// <param name="e"></param>          
18 private void button5_click(object sender, eventargs e)          ...
19 {              
20 int row = this.datagridview1.currentrow.index - 1;             
21  if (row < 0)                  
22 row = this.datagridview1.rowcount - 1;              this.datagridview1.currentcell = this.datagridview1[0, row];         
23  } 
View Code

 

 * 注意: this.datagridview 的索引器的参数是: columnindex, rowindex 或是 columnname, rowindex  这与习惯不同。  

--------------------------------------------------------------------------------  ② datagridview  设定单元格只读:   go to top   1) 使用 readonly 属性  → 如果希望,datagridview 内所有单元格都不可编辑, 那么只要:

 [vb.net]  ' 设置 datagridview1 为只读  datagridview1.readonly = true  

[c#]  // 设置 datagridview1 为只读  datagridview1.readonly = true;此时,用户的新增行操作和删除行操作也被屏蔽了。  

 如果希望,datagridview 内某个单元格不可编辑, 那么只要:

 [vb.net]  ' 设置 datagridview1 的第2列整列单元格为只读  datagridview1.columns(1).readonly = true   ' 设置 datagridview1 的第3行整行单元格为只读  datagridview1.rows(2).readonly = true   ' 设置 datagridview1 的[0,0]单元格为只读  datagridview1(0, 0).readonly = true

 [c#]  // 设置 datagridview1 的第2列整列单元格为只读  datagridview1.columns[1].readonly = true;   // 设置 datagridview1 的第3行整行单元格为只读  datagridview1.rows[2].readonly = true;   // 设置 datagridview1 的[0,0]单元格为只读  datagridview1[0, 0].readonly = true;  2) 使用 editmode 属性  datagridview.editmode 属性被设置为 datagridvieweditmode.editprogrammatically 时,用户就不能手动编辑单元格的内容了。

但是可以通过程序,调用 datagridview.beginedit 方法,使单元格进入编辑模式进行编辑。

 [vb.net]  datagridview1.editmode = datagridvieweditmode.editprogrammatically  

[c#]  datagridview1.editmode = datagridvieweditmode.editprogrammatically;  

3) 根据条件设定单元格的不可编辑状态  当一个一个的通过单元格坐标设定单元格 readonly 属性的方法太麻烦的时候,你可以通过 cellbeginedit 事件来取消单元格的编辑。  [vb.net]  'cellbeginedit 事件处理方法

 [c#]  // cellbeginedit 事件处理方法  private void datagridview1_cellbeginedit(object sender,      datagridviewcellcanceleventargs e)  {      datagridview dgv = (datagridview)sender;      //是否可以进行编辑的条件检查      if (dgv.columns[e.columnindex].name == "column1" &&          !(bool)dgv["column2", e.rowindex].value)      {          // 取消编辑          e.cancel = true;      }  }   --------------------------------------------------------------------------------  ③ datagridview  不显示最下面的新行:   go to top   通常 datagridview 的最下面一行是用户新追加的行(行头显示 * )。如果不想让用户新追加行即不想显示该新行,可以将 datagridview 对象的 allowusertoaddrows 属性设置为 false。  [vb.net]  ' 设置用户不能手动给 datagridview1 添加新行  datagridview1.allowusertoaddrows = false  [c#]  // 设置用户不能手动给 datagridview1 添加新行  datagridview1.allowusertoaddrows = false;  但是,可以通过程序: datagridviewrowcollection.add 为 datagridview 追加新行。   补足: 如果 datagridview 的 datasource 绑定的是 dataview, 还可以通过设置 dataview.allowadd  属性为 false 来达到同样的效果。  

--------------------------------------------------------------------------------  ④ datagridview  判断新增行:   go to top   datagridview的allowusertoaddrows属性为true时也就是允许用户追加新行的场合下,datagridview的最后一行就是新追加的行(*行)。使用 datagridviewrow.isnewrow 属性可以判断哪一行是新追加的行。另外,通过datagridview.newrowindex 可以获取新行的行序列号。在没有新行的时候,newrowindex = -1。 [vb.net]  if datagridview1.currentrow.isnewrow then      console.writeline("当前行为新追加行。")  else      console.writeline("当前行不是新追加行。")  end if   --------------------------------------------------------------------------------  ⑤ datagridview  行的用户删除操作的自定义:   go to top   1) 无条件的限制行删除操作。  默认时,datagridview 是允许用户进行行的删除操作的。如果设置 datagridview对象的allowusertodeleterows属性为 false 时, 用户的行删除操作就被禁止了。  [vb.net]  ' 禁止datagridview1的行删除操作。  datagridview1.allowusertodeleterows = false  [c#]  // 禁止datagridview1的行删除操作。  datagridview1.allowusertodeleterows = false;  但是,通过 datagridviewrowcollection.remove 还是可以进行行的删除。  补足: 如果 datagridview 绑定的是 dataview 的话,通过 dataview.allowdelete 也可以控制行的删除。   2) 行删除时的条件判断处理。  用户在删除行的时候,将会引发 datagridview.userdeletingrow 事件。 在这个事件里,可以判断条件并取消删除操作。  [vb.net]  ' datagridview1 的 userdeletingrow 事件  private sub datagridview1_userdeletingrow(byval sender as object, _          byval e as datagridviewrowcanceleventargs) _          handles datagridview1.userdeletingrow      '  删除前的用户确认。      if messagebox.show("确认要删除该行数据吗?", "删除确认", _          messageboxbuttons.okcancel, messageboxicon.question) <> _              windows.forms.dialogresult.ok then          '  如果不是 ok,则取消。          e.cancel = true      end if  end sub  [c#]  // datagridview1 的 userdeletingrow 事件  private void datagridview1_userdeletingrow(      object sender, datagridviewrowcanceleventargs e)  {      // 删除前的用户确认。      if (messagebox.show("确认要删除该行数据吗?", "删除确认",          messageboxbuttons.okcancel,          messageboxicon.question) != dialogresult.ok)      {          // 如果不是 ok,则取消。          e.cancel = true;      }  }   --------------------------------------------------------------------------------  ⑥ datagridview  行、列的隐藏和删除:   go to top   1) 行、列的隐藏  [vb.net]  ' datagridview1的第一列隐藏  datagridview1.columns(0).visible = false  ' datagridview1的第一行隐藏  datagridview1.rows(0).visible = false  [c#]  // datagridview1的第一列隐藏  datagridview1.columns[0].visible = false;  // datagridview1的第一行隐藏  datagridview1.rows[0].visible = false;  2) 行头、列头的隐藏  [vb.net]  ' 列头隐藏  datagridview1.columnheadersvisible = false  ' 行头隐藏  datagridview1.rowheadersvisible = false  [c#]  // 列头隐藏  datagridview1.columnheadersvisible = false;  // 行头隐藏  datagridview1.rowheadersvisible = false;  3) 行和列的删除 [vb.net] ' 删除名为"column1"的列  datagridview1.columns.remove("column1") ' 删除第一列 datagridview1.columns.removeat(0) ' 删除第一行 datagridview1.rows.removeat(0)   [c#] ' 删除名为"column1"的列  datagridview1.columns.remove("column1");  ' 删除第一列 datagridview1.columns.removeat(0);  ' 删除第一行 datagridview1.rows.removeat(0); 4) 删除选中行  [vb.net]  for each r as datagridviewrow in datagridview1.selectedrows      if not r.isnewrow then          datagridview1.rows.remove(r)      end if  next  [c#] foreach (datagridviewrow r in datagridview1.selectedrows)  {      if (!r.isnewrow)      {          datagridview1.rows.remove(r);      }  }   --------------------------------------------------------------------------------  ⑦ datagridview 禁止列或者行的resize:   go to top   1) 禁止所有的列或者行的resize  [vb.net]  ' 禁止用户改变datagridview1的所有列的列宽  datagridview1.allowusertoresizecolumns = false   '禁止用户改变datagridview1の所有行的行高  datagridview1.allowusertoresizerows = false  [c#]  // 禁止用户改变datagridview1的所有列的列宽  datagridview1.allowusertoresizecolumns = false;   //禁止用户改变datagridview1の所有行的行高  datagridview1.allowusertoresizerows = false;  但是可以通过 datagridviewcolumn.width 或者 datagridviewrow.height 属性设定列宽和行高。   2) 禁止指定行或者列的resize  [vb.net]  '  禁止用户改变datagridview1的第一列的列宽  datagridview1.columns(0).resizable = datagridviewtristate.false   '  禁止用户改变datagridview1的第一列的行宽  datagridview1.rows(0).resizable = datagridviewtristate.false  [c#]  // 禁止用户改变datagridview1的第一列的列宽  datagridview1.columns[0].resizable = datagridviewtristate.false;   // 禁止用户改变datagridview1的第一列的行宽  datagridview1.rows[0].resizable = datagridviewtristate.false;  → 关于 noset   当 resizable 属性设为 datagridviewtristate.notset 时, 实际上会默认以 datagridview 的 allowusertoresizecolumns 和  allowusertoresizerows 的属性值进行设定。比如: datagridview.allowusertoresizecolumns = false 且 resizable 是 noset 设定时,resizable = false 。  

判断 resizable 是否是继承设定了 datagridview 的 allowusertoresizecolumns 和  allowusertoresizerows 的属性值, 可以根据 state 属性判断。如果 state 属性含有 resizableset,那么说明没有继承设定。  

3) 列宽和行高的最小值的设定  [vb.net]  ' 第一列的最小列宽设定为 100  datagridview1.columns(0).minimumwidth = 100   ' 第一行的最小行高设定为 50  datagridview1.rows(0).minimumheight = 50  [c#]  // 第一列的最小列宽设定为 100 datagridview1.columns[0].minimumwidth = 100;   // 第一行的最小行高设定为 50  datagridview1.rows[0].minimumheight = 50;  4) 禁止用户改变行头的宽度以及列头的高度

 [vb.net]  '  禁止用户改变列头的高度  datagridview1.columnheadersheightsizemode = _      datagridviewcolumnheadersheightsizemode.disableresizing   ' 禁止用户改变行头的宽度  datagridview1.rowheaderswidthsizemode = _      datagridviewrowheaderswidthsizemode.enableresizing

 [c#]  // 禁止用户改变列头的高度  datagridview1.columnheadersheightsizemode =      datagridviewcolumnheadersheightsizemode.disableresizing;   // 禁止用户改变行头的宽度  datagridview1.rowheaderswidthsizemode =      datagridviewrowheaderswidthsizemode.enableresizing;  

--------------------------------------------------------------------------------  ⑧ datagridview 列宽和行高自动调整的设定: go to top   1) 设定行高和列宽自动调整  [vb.net]  ' 设定包括header和所有单元格的列宽自动调整  datagridview1.autosizecolumnsmode = datagridviewautosizecolumnsmode.allcells   ' 设定包括header和所有单元格的行高自动调整  datagridview1.autosizerowsmode = datagridviewautosizerowsmode.allcells  

[c#]  // 设定包括header和所有单元格的列宽自动调整  datagridview1.autosizecolumnsmode = datagridviewautosizecolumnsmode.allcells;   // 设定包括header和所有单元格的行高自动调整  datagridview1.autosizerowsmode = datagridviewautosizerowsmode.allcells;  autosizecolumnsmode 属性的设定值枚举请参照 msdn 的 datagridviewautosizerowsmode 说明。  

2)指定列或行自动调整

 [vb.net]  '  第一列自动调整  datagridview1.columns(0).autosizemode = _      datagridviewautosizecolumnmode.displayedcells  

[c#]  // 第一列自动调整  datagridview1.columns[0].autosizemode =      datagridviewautosizecolumnmode.displayedcells;  autosizemode 设定为 notset  时, 默认继承的是  datagridview.autosizecolumnsmode 属性。  

3) 设定列头的高度和行头的宽度自动调整

[vb.net]  '  设定列头的宽度可以自由调整  datagridview1.columnheadersheightsizemode = _      datagridviewcolumnheadersheightsizemode.autosize   '  设定行头的宽度可以自由调整  datagridview1.rowheaderswidthsizemode = _      datagridviewrowheaderswidthsizemode.autosizetoallheaders

 [c#]  // 设定列头的宽度可以自由调整  datagridview1.columnheadersheightsizemode =      datagridviewcolumnheadersheightsizemode.autosize;   // 设定行头的宽度可以自由调整  datagridview1.rowheaderswidthsizemode =      datagridviewrowheaderswidthsizemode.autosizetoallheaders;  

4) 随时自动调整  a, 临时的,让列宽自动调整,这和指定autosizecolumnsmode属性一样。

[vb.net]  ' 让 datagridview1 的所有列宽自动调整一下。  datagridview1.autoresizecolumns(datagridviewautosizecolumnsmode.allcells)   ' 让 datagridview1 的第一列的列宽自动调整一下。  datagridview1.autoresizecolumn(0, datagridviewautosizecolumnmode.allcells)  

[c#]  // 让 datagridview1 的所有列宽自动调整一下。  datagridview1.autoresizecolumns(datagridviewautosizecolumnsmode.allcells);   // 让 datagridview1 的第一列的列宽自动调整一下。  datagridview1.autoresizecolumn(0, datagridviewautosizecolumnmode.allcells);上面调用的 autoresizecolumns 和 autoresizecolumn 当指定的是datagridviewautosizecolumnmode.allcells 的时候, 参数可以省略。即:  datagridview1.autoresizecolumn(0) 和 datagridview1.autoresizecolumns()   b,临时的,让行高自动调整  [vb.net]  ' 让 datagridview1 的所有行高自动调整一下。  datagridview1.autoresizerows(datagridviewautosizerowsmode.allcells)   ' 让 datagridview1 的第一行的行高自动调整一下。  datagridview1.autoresizerow(0, datagridviewautosizerowmode.allcells)  [c#]  // 让 datagridview1 的所有行高自动调整一下。  datagridview1.autoresizerows(datagridviewautosizerowsmode.allcells);   //让 datagridview1 的第一行的行高自动调整一下。  datagridview1.autoresizerow(0, datagridviewautosizerowmode.allcells);上面调用的 autoresizerows 和 autoresizerow 当指定的是datagridviewautosizerowmode.allcells 的时候, 参数可以省略。即:datagridview1.autoresizerow (0) 和 datagridview1.autoresizerows()   c,临时的,让行头和列头自动调整  [vb.net]  ' 列头高度自动调整  datagridview1.autoresizecolumnheadersheight()   ' 行头宽度自动调整 datagridview1.autoresizerowheaderswidth( _      datagridviewrowheaderswidthsizemode.autosizetoallheaders)  [c#]  // 列头高度自动调整  datagridview1.autoresizecolumnheadersheight();   // 行头宽度自动调整  datagridview1.autoresizerowheaderswidth(      datagridviewrowheaderswidthsizemode.autosizetoallheaders);  

关于性能:  通过 autosizecolumnsmode 或者 autosizerowsmode 属性所指定的单元格进行自动调整时,如果调整次数过于多那么将可能导致性能下降,尤其是在行和列数比较多的情况下。在这时用 displayedcells 代替 allcells 能减少非所见的单元格的调整,从而提高性能。  

  ⑨ datagridview 冻结列或行 go to top   1) 列冻结  datagridviewcolumn.frozen 属性为 true 时, 该列左侧的所有列被固定, 横向滚动时固定列不随滚动条滚动而左右移动。这对于重要列固定显示很有用。    

[vb.net]  ' datagridview1的左侧2列固定  datagridview1.columns(1).frozen = true    

[c#]  // datagridview1的左侧2列固定  datagridview1.columns[1].frozen = true;  但是,datagridview.allowusertoordercolumns = true 时,固定列不能移动到非固定列, 反之亦然。   2) 行冻结  datagridviewrow.frozen 属性为 true 时, 该行上面的所有行被固定, 纵向滚动时固定行不随滚动条滚动而上下移动。  [vb.net]  ' datagridview1 的上3行固定  datagridview1.rows(2).frozen = true  [c#]  // datagridview1 的上3行固定  datagridview1.rows[2].frozen = true;  

 ⑩ datagridview 列顺序的调整   go to top   设定 datagridview 的 allowusertoordercolumns 为 true 的时候, 用户可以自由调整列的顺序。  当用户改变列的顺序的时候,其本身的 index 不会改变,但是 displayindex 改变了。你也可以通过程序改变 displayindex 来改变列的顺序。 列顺序发生改变时会引发 columndisplayindexchanged 事件:  [vb.net]  ' datagridview1的columndisplayindexchanged事件处理方法  private sub datagridview1_columndisplayindexchanged(byval sender as object, _          byval e as datagridviewcolumneventargs) _          handles datagridview1.columndisplayindexchanged      console.writeline("{0} 的位置改变到 {1} 。", _          e.column.name, e.column.displayindex)  end sub  [c#]  // datagridview1的columndisplayindexchanged事件处理方法  private void datagridview1_columndisplayindexchanged(object sender,      datagridviewcolumneventargs e)  {      console.writeline("{0} 的位置改变到 {1} ",          e.column.name, e.column.displayindex);  }   --------------------------------------------------------------------------------  ? datagridview 行头列头的单元格   go to top  

[vb.net]  ' datagridview1的第一列列头内容  datagridview1.columns(0).headercell.value = "第一列"   ' datagridview1的第一行行头内容  datagridview1.rows(0).headercell.value = "第一行"   ' datagridview1的左上头部单元内容  datagridview1.topleftheadercell.value = "左上"  [c#]  // 改变datagridview1的第一列列头内容  datagridview1.columns[0].headercell.value = "第一列";   // 改变datagridview1的第一行行头内容  datagridview1.rows[0].headercell.value = "第一行";   // 改变datagridview1的左上头部单元内容  datagridview1.topleftheadercell.value = "左上";  另外你也可以通过 headertext 来改变他们的内容。  [vb.net]  ' 改变datagridview1的第一列列头内容  datagridview1.columns(0).headertext = "第一列"  [c#]  // 改变datagridview1的第一列列头内容  datagridview1.columns[0].headertext = "第一列";   --------------------------------------------------------------------------------  ? datagridview 剪切板的操作   go to top  datagridview.clipboardcopymode 属性被设定为 datagridviewclipboardcopymode.disable 以外的情况时,「ctrl + c」 按下的时候,被选择的单元格的内容会拷贝到系统剪切板内。格式有: text, unicodetext,html, commaseparatedvalue。可以直接粘贴到 excel 内。   clipboardcopymode 还可以设定 header部分是否拷贝: enablealwaysincludeheadertext 拷贝header部分、enablewithoutheadertext 则不拷贝。默认是 enablewithautoheadertext , header 如果选择了的话,就拷贝。   1) 编程方式实现剪切板的拷贝   clipboard.setdataobject(datagridview1.getclipboardcontent())   2) datagridview 的数据粘贴   实现剪切板的拷贝比较容易,但是实现 datagridview 的直接粘贴就比较难了。「ctrl + v」按下进行粘贴时,datagridview 没有提供方法,只能自己实现。   以下,是粘贴时简单的事例代码,将拷贝数据粘贴到以选择单元格开始的区域内。  [vb.net]  ' 当前单元格是否选择的判断  if datagridview1.currentcell is nothing then      return  end if  dim insertrowindex as integer = datagridview1.currentcell.rowindex   ' 获取剪切板的内容,并按行分割  dim pastetext as string = clipboard.gettext()  if string.isnullorempty(pastetext) then      return  end if  pastetext = pastetext.replace(vbcrlf, vblf)  pastetext = pastetext.replace(vbcr, vblf)  pastetext.trimend(new char() {vblf})  dim lines as string() = pastetext.split(vblf)   dim isheader as boolean = true  for each line as string in lines      ' 是否是列头      if isheader then          isheader = false      else          ' 按 tab 分割数据          dim vals as string() = line.split(controlchars.tab)          ' 判断列数是否统一

更多详细内容请查看:http://www.111cn.net/net/160/37258.htm

转载于:https://www.cnblogs.com/ching2008gk/p/3339218.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab显示二值直方图,图像灰度变换、二值化、直方图

1、灰度变换1)灰度图的线性变换Gnew Fa * Gold Fb。Fa为斜线的斜率&#xff0c;Fb为y轴上的截距。Fa>1 输出图像的对比度变大&#xff0c;否则变小。Fa1 Fb≠0时&#xff0c;图像的灰度上移或下移&#xff0c;效果为图像变亮或变暗。Fa-1&#xff0c;Fb255时&#xff0c;发…

blender怎么移动骨骼,Blender学习笔记-(015)创建骨骼绑定及权重绘制操作详解

骨骼创建绑定具体操作如下&#xff1a;1&#xff1a; 【ShiftA】创建基础骨骼。(也可以通过打开Blender的插件Rigging&#xff1a;Rigify&#xff0c;生成自定义骨骼)2&#xff1a;点击骨骼&#xff0c;按【Tab】键进入编辑模式&#xff0c;选中创建骨骼端&#xff0c;按【E】拖…

[MySQL binlog实战] 增量同步与数据搜索~从入门到精通

学习基础知识&#xff0c;并落实到实际场景&#xff08;增量同步数据搜索&#xff09; 对基础知识不感兴趣的&#xff0c;可以直接跳到应用场景 文章目录 binlog是什么简介产生方式文件格式statementrowmixed 怎么办开启 binlog查看 binlog其他查看相关命令运维查看 binlog设置…

从硬核科幻小说《三体》中看嵌入式

1 2 3 4 5 6 7 8 9 转载于:https://www.cnblogs.com/OleNet/p/3352189.html

php快速排序和二分查找法,二分查找及快速排序

小朋友二分查找和快速排序思想上有很大的相似度&#xff0c;就是做一个起始点&#xff0c;开始往左右做动作&#xff0c;也同样是由递归实现&#xff0c;当然也可以不用递归实现。但是我觉得也不能用php内置特有的函数- -&#xff0c;我找了很多php的快速排序&#xff0c;几乎都…

extractCSS – 帮助你从 HTML 中快速分离出 CSS

extractCSS 是一个免费的基于 Web 的应用程序&#xff0c;能够从 HTML 中提取风格相关的信息&#xff0c;包括 id、class 和内联样式&#xff0c;而且输出可以定制&#xff08;缩进和括号的用法&#xff09;。该工具非常有用&#xff0c;当我们快速创建一个使用了内联样式的 HT…

php项目安装器,php项目安装器程序源码,php通用安装程序

php项目安装器程序源码,php通用安装程序一个安装器的源码&#xff0c;最简单的看一下emlog 也可以&#xff01;文件目录结构index.php 程序首页│ ├─conf 安装后配置文件目录├─data    目录写入测试目录└─install 安装程序目录 │ index.php   安装程…

Python开发环境Wing IDE 5.0测试第八版发布

Wing IDE是著名的Python开发工具&#xff0c;是Wingware公司的主要产品。从1999年起&#xff0c;Wingware公司便开始专注于Python开发设计。Wing IDE在十几年的发展中&#xff0c;不管完善。其强大设计理念包括&#xff1a;编辑工具丰富&#xff0c;编译测试版权一体化&#xf…

WPF自定义控件 —— 装饰器

摘自&#xff1a;http://www.cnblogs.com/Curry/archive/2009/09/16/1567757.html 顾名思义就是装饰用的&#xff0c;也就是说不改变原有的控件结构&#xff0c;但可以为控件添加一些新的功能&#xff0c;或是为控件的显示外观增加些东西。如MSDN中的例子&#xff1a; 本来Text…

Netty Associated -- ByteBuf

ByteBuf ByteBuf是Netty的Server与Client之间通信的数据传输载体.他提供了一个byte数组(byte[])的抽象视图 buffer创建 我们推荐通过一个Unpooled的帮助方法来创建新的buffer而不是通过调用独立的构造器来创建 随机访问索引 就像普通的原声字节数组一样, ByteBuf使用零基坐标(z…

php 根号2计算过程,根号2以及π的计算--关于无理数的畅想

[导读]这两篇文章里&#xff0c;我发现不需要那些老师教的范式也能很好地理解那些现代概念&#xff0c;并且理解的更深刻。这两篇文章里&#xff0c;我发现不需要那些老师教的范式也能很好地理解那些现代概念&#xff0c;并且理解的更深刻。我一般假设自己从来没有学过微积分&a…

任务分配与时间估计

各成员的任务分配与时间估计如下&#xff1a; 项目所需总时间为&#xff1a; 转载于:https://www.cnblogs.com/buaa-smile/p/3383374.html

linux所有用户无法登录用户名和密码错误,为什么linux登录不了啊,用户名和密码都没问题,就是出现这个,有高手指点一下。...

为什么linux登录不了啊&#xff0c;用户名和密码都没问题&#xff0c;就是出现这个&#xff0c;有高手指点一下。关注:121 答案:6 mip版解决时间 2021-02-04 23:27提问者删除记忆里的你2021-02-04 04:27最佳答案二级知识专家那年夏天2021-02-04 05:19用户名肯定是root&#x…

linux spring mvc tomcat配置,Spring MVC配置详解

一、Spring MVC处理流程1.Spring MVC将所有请求都交由DispatchServlet进行处理。2.DispatchServlet获取HandlerMapping(处理映射器)&#xff0c;然后找到对应的HandlerBean处理Controller请求&#xff0c;并返回一个ModelAndView对象。3.DispatchServlet查询一个或多个ViewReso…

如何在linux里面运行ncl,NCL基础讲解(二)——NCL安装与运行

NCL基础讲解(二)——NCL安装与运行兰溪之水2015-11-04上一期已经给大家简单介绍了NCL的基本情况&#xff0c;既然NCL在科学数据分析和可视化方面有那么多优点&#xff0c;那还等什么&#xff0c;让我们一起“用”起来吧&#xff01;这一期给大家介绍NCL的安装与运行。关于NCL的…

C#值类型和引用类型的不同

1 C#中有两种类型&#xff1a; 值类型和引用类型&#xff1a; 值类型的变量直接包含他们的数据&#xff0c;引用类型存储对他们的数据的引用&#xff0c;后者称为对象&#xff1a; 简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象。2…