c#开发_Dev的关于XtraGrid的使用(GridControl小结)
1,增加新行用InitNewRow事件,给新行某字段赋值。后结束编辑。
private void grdView_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
{
DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
view.SetRowCellValue(e.RowHandle, view.Columns["EnterID"], this.dS_MEnterStoreView.MEnterStore[0].ID);
this.grdControl.EmbeddedNavigator.Buttons.EndEdit.DoClick();
this.grdView.UpdateCurrentRow();
}
2,如果进行行验证,就在换行时时行,用grdView_FocusedRowChanged事件
private void grdView_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
WsClient.WS_MEnterStore.DS_MEnterStoreView.MEnterDetailRow row = (WsClient.WS_MEnterStore.DS_MEnterStoreView.MEnterDetailRow)this.grdView.GetDataRow(e.FocusedRowHandle); if (row != null)
{
if ((this.OperState == Common.Enum.TOperState.UnConfirmNew)
|| (this.OperState == Common.Enum.TOperState.UnConfirmEdit))
{
this.InitComboBoxValue(row, row.IsGoodIDNull()?0:row.GoodID, false);
this.InitBatchComboBoxValue(row, row.IsGoodIDNull()?0:row.GoodID, false);
}
}
}
3,如果需要改变行的某一列的同时改变其它的列用grdView_CellValueChanged事件
private void grdView_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
if (this.grdView.FocusedColumn == e.Column)
{
if (e.Column == this.colAmount)
{
}
}
}
4,如果需在离开行的时候需要验证,则用grdView_BeforeLeaveRow事件.
DevExpress XtraGrid的功能实在强大,刚使用的时候看到一大片属性设置,分不清东南西北,参照demo和使用中的一些经验,记录一下使用方法。现在数据库访问都使用ORM技术了,对于DataSouce绑定以下是以IList为说明对象。
控件基本定义 DevExpress.XtraGrid.GridControl gridControl1;
1、 数据绑定(IList)
DevExpress.XtraGrid.Views.Grid.GridView gridView1;
IList<MyClass> list = new BindingList<MyClass>();
//初始list
list.Add(A);
list.Add(B);
………..
gridControl1.DataSource = list;
2、 在Grid上编辑数据
修改属性gridView1.OptionsView.NewItemRowPosition,设为Top或Bottom可以在Grid上添加数据。
(在demo中原文:a record object must be inherited from the IEditableObject class if you need the ability to cancel newly added records via the grid)
译:如果你需要通过gird取消新建的记录,你的记录对象必须实现IEditableObject
(注:在测试中,感觉不需要继承IEditableObject,在grid编辑后也能实现取消。demo通过实现IEditableObject的BeginEdit、CancelEdit方法,数据编辑后恢复特定数据。不使用grid直接修改数据,可以考虑这种恢复原数据的方法。)
3、 修改列(Column)格式
DevExpress.XtraGrid.Columns.GridColumn col = gridView1.Columns[0];
数据对齐方式 col.AppearanceCell.TextOptions.HAlignment, 默认值Default,可选值Default/Near/Center/Far。
说明:以下情况是基于从左到右的文字排列;若是从右到左,用法相反。
Default:数据默认的对齐方式
Near:左对齐
Center:居中对齐
Far:右对齐
列标题 col.Caption
对应绑定数据的属性 col.FieldName
排列顺序 col.VisibleIndex
格式化显示数据
Col.DisplayFormat.FormatType
Col.DisplayFormat.Format
Col.DisplayFormat.FormatString
区别:FormatType/FormatString 使用当前系统的语言区域设置,Format使用特定的
4、 使用Grid内置导航栏
gridControl1.UseEmbeddedNativgator=True
设定内置导航栏按钮其他属性 gridControl1.EmbeddedNavigator
5、 GridView内置方式编辑数据
禁止编辑数据 gridView1.OptionsBehavior.Editable = False,默认是True 可编辑。
Gridview内置数据编辑器显示方式 gridView1.OptionsBehavior.EditorShowMode,可选值Default/ MouseDown/MouseUp/ Click。
说明:
Default 多选Cell相当于Click,单选Cell相当于MouseDown
MouseDown 在单元格内按下鼠标键时打开内置编辑器
MouseUp 在单元格内释放鼠标键时打开内置编辑器
Click 在不是编辑状态,但获得焦点的单元格中点击时打开编辑器。点击非焦点单元格时,首先会切换焦点,再点击时才打开编辑器
6、 设定GrideView单元格的内置编辑器
在Run Designer的Columns选中需要变更编辑方式的Column,在ColumnEdit 属性的下拉菜单中选择编辑数据使用的控件。
例1:Person表的CountryID字段的值来自Country表,使用下拉列表显示CountryName编辑
修改CountryIDColumn.ColumnEdit值,选new->LookupEdit,默认命名为repositoryItemLookUpEdit1。展开ColumnEdit属性,将DisplayMember 设为CountryName,DropDownRows是下拉列表的行数,ValueMember设为CountryID。
代码中添加:
//init data
repositoryItemLookUpEdit1.DataSource = ds.Tables[Country];
例2:字段Age是整型,需要使用SpinEdit编辑
修改AgeColumn.ColumnEdit值,选new->SpinEdit。展开ColumnEdit属性,修改MaxValue、MinValue设定最大、最小值。运行时Age的取值只能在MaxValue至MinValue之间选值。
7、 GridView调节行高显示大文本
默认情况下gridview已单行方式显示,过长的文本只能显示开头部分,鼠标停留在单元格上方有ToolTip显示所有文本。在文本单元格的右边两个按钮供切换显示上下行。若需要在单元格变更行高显示所有文本。使用
gridView1.OptionsView.RowAutoHeight = True;
gridView1.LayoutChanged();
private void gridView1_CalcRowHeight(object sender,DevExpress.XtraGrid.Views.Grid.RowHeightEventArgs e)
{
if(e.RowHandle >= 0)
e.RowHeight = (int)gridView1.GetDataRow(e.RowHandle)["RowHeight"];
}
8、 数据导出
XtraGrid支持Html、Xml、Txt、Xsl导出,对应的导出器是ExportHtmlProvider、ExportXmlProvider、ExportTxtProvider、ExportXslProvider
例:使用html格式导出数据
IExportProvider provider = new ExprotHtmlProvider(filename);
ExportTo(provider);
……
private void ExportTo(IExportProvider provider) {
Cursor currentCursor = Cursor.Current;
Cursor.Current = Cursors.WaitCursor; this.FindForm().Refresh();
BaseExportLink link = gridView1.CreateExportLink(provider);
(link as GridViewExportLink).ExpandAll = false;
link.Progress += new DevExpress.XtraGrid.Export.ProgressEventHandler(Export_Progress);//进度条事件
link.ExportTo(true);
provider.Dispose();
link.Progress -= new DevExpress.XtraGrid.Export.ProgressEventHandler(Export_Progress);
Cursor.Current = currentCursor; }
9、 焦点单元格显示方式
GrideView默认的焦点单元格显示方式是整行选中,焦点单元格高亮。可以调整以下属性进行修改
gridView1.FocusRectStyle :焦点绘画方式 默认DrawFocusRectStyle.CellFocus(单元格)/ DrawFocusRectStyle.RowFocus(行)/ DrawFocusRectStyle.None(不绘画)
bool gridView1.OptionsSelection.EnableAppearanceFocusedCell :是否焦点显示选中的单元格
bool gridView1.OptionsSelection.EnableAppearanceFocusedRow :是否焦点显示选中的行
bool gridView1.OptionsSelection.InvertSelection :是否反显示
bool gridView1.OptionsSelection.MultiSelect:是否使用多选
10、
显示非数据源的数据
可以在GrideView上增加数据源没有的列,如合计、日期、序号或其他数据源等。
方法一:实现CustomColumnDisplayText事件(只能用于显示)
以下例子在bandedGridColumn1上显示 FirstName+LastName
bandedGridColumn1.OptionsColumn.AllowEdit = false;
private void bandedGridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
{
if(e.Column.Equals(bandedGridColumn1))
{
DataRow row = bandedGridView1.GetDataRow(e.RowHandle);
e.DisplayText = string.Format("{0} {1}", row["FirstName"], row["LastName"]);
}
}
方法二: 设定列的UnboundType,并实现CustomUnboundColumnData事件(可修改值)
以下例子演示DateTime/Int/String 绑定到数据列上显示。当修改 GrideView上的值时,将修改同步到原数组中
bandedGridColumn4.UnboundType = DevExpress.Data.UnboundColumnType.DateTime;
bandedGridColumn5.UnboundType = DevExpress.Data.UnboundColumnType.Integer;
bandedGridColumn6.UnboundType = DevExpress.Data.UnboundColumnType.String; private void bandedGridView1_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e) {
if(array == null) return;
if(e.ListSourceRowIndex >= array.Count) return;
Record rec = array[e.ListSourceRowIndex] as Record;
if(rec == null) return;
switch(e.Column.UnboundType) {
case UnboundColumnType.DateTime:
if(e.IsGetData)
e.Value = rec.Date;
else rec.Date = (DateTime)e.Value;
break;
case UnboundColumnType.Integer:
if(e.IsGetData)
e.Value = rec.Count;
else rec.Count = (Int32)e.Value;
break;
case UnboundColumnType.String:
if(e.IsGetData)
e.Value = rec.Comment;
else rec.Comment = e.Value.ToString();
break;
}
}
提交当前行的修改
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Base;
using System.Data.Common;
//...
public void UpdateDatasource(GridControl grid) {
//Save the latest changes to the bound DataTable
ColumnView view = (ColumnView)grid.FocusedView;
view.CloseEditor();
if(!view.UpdateCurrentRow()) return; //Update the database's Suppliers table to which oleDBDataAdapter1 is connected
DoUpdate(oleDbDataAdapter1, dataSet11.Tables["Suppliers"]);
//Update the database's Products table to which the oleDbDataAdapter2 is connected
DoUpdate(oleDbDataAdapter2, dataSet11.Tables["Products"]);
} public void DoUpdate(DbDataAdapter dataAdapter, System.Data.DataTable dataTable) {
try {
dataAdapter.Update(dataTable);
} catch(Exception ex) {
MessageBox.Show(ex.Message);
}
}
接着说,GirdControl如何定位和查找指定列显示值的行(注意是列的实显示值,而不是关联数据源列值)
下面请看代码:
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Columns;
// ... string searchText = "Japan";
// obtaining the focused view
ColumnView view = (ColumnView)gridControl1.FocusedView;
// obtaining the column bound to the Country field
GridColumn column = view.Columns["Country"];
if(column != null) {
// locating the row
//如果用数据源中的列值,请用ColumnView.LocateByValue
int rhFound = view.LocateByDisplayText(view.FocusedRowHandle + 1, column, searchText);
// focusing the cell
if(rhFound != GridControl.InvalidRowHandle) {
view.FocusedRowHandle = rhFound;
view.FocusedColumn = column;
}
}
另一个查找示例
DevExpress.XtraGrid.Views.Base.ColumnView view = gridControl1.MainView as DevExpress.XtraGrid.Views.Base.ColumnView;
view.BeginUpdate();
try {
int rowHandle = 0;
DevExpress.XtraGrid.Columns.GridColumn col = view.Columns["Category"];
while(true) {
// locating the next row
rowHandle = view.LocateByValue(rowHandle, col, "SPORTS");
// exiting the loop if no row is found
if (rowHandle == DevExpress.XtraGrid.GridControl.InvalidRowHandle)
break;
// perform specific operations on the row found here
// ...
rowHandle++;
}
}
finally {
view.EndUpdate();
}
将特定编辑框绑定到列
默认的cell编辑框是不可以改变的,即使是在运行时,因为它们是动态创建和注销的。
要想定制,就在设计时修改ColumnEdit吧。
using DevExpress.XtraEditors.Repository; //Create a repository item for a combo box editor
RepositoryItemComboBox riCombo = new RepositoryItemComboBox();
riCombo.Items.AddRange(new string[] {"London", "Berlin", "Paris"});
//Add the item to the internal repository
gridControl1.RepositoryItems.Add(riCombo);
//Now you can define the repository item as an in-place column editor
colCity.ColumnEdit = riCombo;
另一个运行时绑定列编辑框示例
private void gridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e) {
if (e.Column.FieldName == "FieldName") return;
DevExpress.XtraGrid.Views.Grid.GridView gv = sender as DevExpress.XtraGrid.Views.Grid.GridView;
string fieldName = gv.GetRowCellValue(e.RowHandle, gv.Columns["FieldName"]).ToString();
switch (fieldName) {
case "Population":
e.RepositoryItem = repositoryItemSpinEdit1;
break;
case "Country":
e.RepositoryItem = repositoryItemComboBox1;
break;
case "Capital":
e.RepositoryItem = repositoryItemCheckEdit1;
break;
}
}
检验录入数据是否有效
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Columns; public bool isValidDate(int day, int month, int year) {
return (day > 0) && (month > 0) && (month <= 12) && (year > 1980) && (year < 2100) && (day <= DateTime.DaysInMonth(year, month));
} private void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e) {
GridView view = sender as GridView;
GridColumn colDay = view.Columns["Day"];
GridColumn colMonth = view.Columns["Month"];
GridColumn colYear = view.Columns["Year"];
int day = (int)view.GetRowCellValue(e.RowHandle, colDay);
int month = (int)view.GetRowCellValue(e.RowHandle, colMonth);
int year = (int)view.GetRowCellValue(e.RowHandle, colYear);
e.Valid = isValidDate(day, month, year);
if(!e.Valid) {
view.SetColumnError(colDay, "Check the day");
view.SetColumnError(colMonth, "Check the month");
view.SetColumnError(colYear, "Check the year");
}
}
MouseMove捕捉
private void Grid_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
ShowHitInfo(this.gridView1.CalcHitInfo(new Point(e.X, e.Y)));
}
private void ShowHitInfo(DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi)
{
DevExpress.XtraGrid.Views.Base.ColumnView cgv =
(DevExpress.XtraGrid.Views.Base.ColumnView)Grid.MainView;
string columnName = hi.Column == null ? "No column" : hi.Column.Caption;
switch(columnName)
{
case "账号":
txtUserName.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
break;
case "密码":
txtPassword.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
break;
case "真实姓名":
txtRealName.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
break;
case "电子邮件":
txtEmail.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
break;
case "角色":
cbRole.Text = cgv.GetRowCellDisplayText(hi.RowHandle,hi.Column);
break;
default:
txtUserName.Text = "Null";
txtPassword.Text = "Null";
txtRealName.Text = "Null";
txtEmail.Text = "Null";
cbRole.Text = "Null";
break;
}
主从表的设置
DataTable dt = pb.GetItemInfoList(Port).Copy(); //返回一个TABLE
dt.TableName = "ItemInfo";
ds.Tables.Add(dt);
DataTable dt2 = pb.GetBuildingInfoList(Port).Copy(); //返回一个TABLE
dt2.TableName = "BuildingInfo";
ds.Tables.Add(dt2);
DataColumn keyColumn = ds.Tables["ItemInfo"].Columns["ITEMINFO_ID"];
DataColumn foreignKeyColumn = ds.Tables["BuildingInfo"].Columns["ITEMINFOID"];
ds.Relations.Add("itembuildinginfo", keyColumn, foreignKeyColumn);
gridControl1.DataSource = ds.Tables["ItemInfo"];
获取从表的当前选择行的某一列(如ID列)
这个时候再使用获取主表当前选择行的某一列的方法是不行的,因为所得到的seletedrowscount=0。使用如下方法得到:
在MASTER表的展开事件中得到detail有的view.然后就可以利用它了。例:
//主表的masterrowexpanded事件
private void gridView1_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e)
{
detailView = gridView1.GetDetailView(e.RowHandle, e.RelationIndex) as DevExpress.XtraGrid.Views.Grid.GridView;
} //取得从表的当前行
int[] i = detailView.GetSelectedRows();
DataRowView dt = (DataRowView)detailView.GetRow(i[0]); //获得当前行某列的值可以使用 dt["列名"].ToString(); //获得当那个列的值。
定义焦点行的方法:
gridView_bcode.FocusedRowHandle = focuseRowInt; //通过设置GridView 的FocusedRowHandle属性 //获取焦点行任意单元格的数据
ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新获取此ID 否则无法从表头连删获取不到id
int focusedhandle = cv.FocusedRowHandle;
object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");
if (DBNull.Value != rowIdObj)
{
FocusedRow_id = Convert.ToInt32(rowIdObj);
}
//获取焦点行任意单元格的数据
ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新获取此ID 否则无法从表头连删获取不到id
int focusedhandle = cv.FocusedRowHandle;
object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");
if (DBNull.Value != rowIdObj)
{
FocusedRow_id = Convert.ToInt32(rowIdObj);
}
view plaincopy to clipboardprint?
//当数据发生变化时执行
private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
{
int intRowHandle = e.RowHandle;
FocusedRow_bumen = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "bumen"));
FocusedRow_xingming = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "xingming"));
//FocusedRow_jibengongzi = Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle, "jibengongzi"));
object rowJibengongziObj = gridView1.GetRowCellValue(intRowHandle, "jibengongzi");
if (DBNull.Value != rowJibengongziObj)
{
FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);
}
}
//当数据发生变化时执行
private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
{
int intRowHandle = e.RowHandle;
FocusedRow_bumen = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "bumen"));
FocusedRow_xingming = Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "xingming"));
//FocusedRow_jibengongzi = Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle, "jibengongzi"));
object rowJibengongziObj = gridView1.GetRowCellValue(intRowHandle, "jibengongzi");
if (DBNull.Value != rowJibengongziObj)
{
FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);
}
} view plaincopy to clipboardprint?
//设置焦点行的焦点单元格的位置
ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
view.FocusedColumn = view.Columns["bumen"];
//设置焦点行的焦点单元格的位置
ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
view.FocusedColumn = view.Columns["bumen"]; view plaincopy to clipboardprint?
//当焦点行发生改变时执行 获取选中焦点行id
private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
int intRowHandle = e.FocusedRowHandle; object rowIdObj = gridView1.GetRowCellValue(intRowHandle, "id"); if (DBNull.Value != rowIdObj)//做个判断否则获取不到id后报错
{
FocusedRow_id = Convert.ToInt32(rowIdObj);
}
}
//当焦点行发生改变时执行 获取选中焦点行id
private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
int intRowHandle = e.FocusedRowHandle; object rowIdObj = gridView1.GetRowCellValue(intRowHandle, "id"); if (DBNull.Value != rowIdObj)//做个判断否则获取不到id后报错
{
FocusedRow_id = Convert.ToInt32(rowIdObj);
}
} view plaincopy to clipboardprint?
//焦点行的FocusedHandle为:
FocuseRow_Handle = -999998;
//获取焦点行的handle
ColumnView newview = (ColumnView)gridControl_Gongzi.FocusedView; FocuseRow_Handle = newview.FocusedRowHandle;
//回车添加新行
代码
private void gridView1_KeyPress(object sender, KeyPressEventArgs e) {
if (e.KeyChar == 13)
{
ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;
if(view.IsLastRow)
{
if (FocuseRow_Handle == 0)
{
gridView1.AddNewRow(); ColumnView newview = (ColumnView)gridControl_Gongzi.FocusedView; newview.FocusedColumn = newview.Columns["bumen"];//定位焦点网格的位置 FocuseRow_Handle = newview.FocusedRowHandle;//获取新焦点行的FocuseRowHandle 并初始化全局变量FocuseRow_Handle供保存操作时判断是upd ate还是insert
}
c#开发_Dev的关于XtraGrid的使用(GridControl小结)的更多相关文章
- 在开发中关于javaweb中的路径问题小结
转自http://blog.csdn.net/yinyuehepijiu/article/details/9136117 在javaweb项目中添加配置文件,满足连接数据库配置参数以及其他自定义参数存 ...
- python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)
一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
- ArcGIS API for Silverlight开发入门
你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都会被包裹在3G网络中.1100也不是一成不变,没准哪天为了打击 ...
- VSCode开发(一)——入门基础
8天掌握EF的Code First开发之Entity Framework介绍 返回<8天掌握EF的Code First开发>总目录 本篇目录 Entity Framework概要 什么 ...
- 我的 Android 开发实战经验总结
我的 Android 开发实战经验总结 字数4440 阅读5137 评论43 喜欢250 曾经一直想写一篇总结 Android 开发经验的文章,预计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟 ...
- 《Python全栈开发指南》第3版 Alex著(LFXC2018)
第一章 Python基础——Python介绍&循环语句 1.1 编程语言介绍 1.2 Python介绍 1.3 Python安装 1.4 第一个Python程序 1.5 变量 1.6 程序交互 ...
- Dev控件
在DevExpress程序中使用PopupContainerEdit和PopupContainer实现数据展示 使用PopupContainerEdit和PopupContainerControl制作 ...
- Devexpress
1.隐藏最上面的GroupPanel gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值 sValue=Table.Rows[gri ...
随机推荐
- 软工1816 · 第八次作业(课堂实战)- 项目UML设计(团队)
本次作业博客 团队信息 队名:起床一起肝活队 原组长: 白晨曦(101) 原组员: 李麒 (123) 陈德斌(104) 何裕捷(214) 黄培鑫(217) 王焕仁(233) 林志华(128) 乐忠豪( ...
- ASP.NET Core 中的 Razor 页面介绍
标题:ASP.NET Core 中的 Razor 页面介绍 地址:https://docs.microsoft.com/zh-cn/aspnet/core/razor-pages/index?view ...
- 第5题 查找字符串中的最长回文字符串---Manacher算法
转载:https://www.felix021.com/blog/read.php?2040 首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一 ...
- git因commit的记录太大导致push失败解决方法
发现好像这个方法不好使.......~~!还是会失败 如果有人或者自己失误把不该同步的大文件如数据或日志或其他中间文件给commit了并且push了,然后你删掉了,但是其实他仍然在你的git记录中,你 ...
- sublime插件时间
import datetime import sublime_plugin class AddCurrentTimeCommand(sublime_plugin.TextCommand): def r ...
- web移动开发最佳实践之js篇
一.js概述 js即JavaScript,是被设计用来验证表单.检测浏览器.创建cookies.改进设计以及更多应用的网络脚本语言,它非常容易使用.在web应用中,它是主要的编程语言,主要用途是进行各 ...
- PHP面向对象之接口
接口(interface)技术 什么是接口? 先看抽象类: abstract class 类名 { 属性1: 属性2: ..... 非抽象方法1: 非抽象方法2: ...... 抽象方法1: 抽 ...
- CTSC2012-Cheat
题意 给出一些母01串,多次询问,每次询问一个01串,问一个最大的\(L\),使得可以在询问串中选出若干个不相交的,长度大于等于\(L\)的子串,这些子串都在母串中出现过,且子串的长度和大于等于询问串 ...
- BZOJ4974 字符串大师(kmp)
显然最短循环节长度=i-next[i],则相当于给定next数组构造字符串.然后按照kmp的过程模拟即可.虽然这看起来是一个染色问题,但是由图的特殊性,如果next=0只要贪心地选最小的就可以了,稍微 ...
- 英文报道:China challenged Australian warships in South China Sea, reports say
学习地道新闻英语表达,以下文章来自CNN By Ben Westcott and Jamie Tarabay, CNN Updated 0830 GMT (1630 HKT) April 20, 20 ...