Dev属性设置

摘要:
表示出来为50%2、GridContro总合计及分组合计:常规总合计直接RunDesigner-GroupSummaryItemsDisplayFormat设置显示格式如:{0:P}表示显示为百分号模式。如数据源中为0.5。表示出来为50%FieldName设置显示的对应列ShowInGroupColumnFooter在那一列下面显示SummaryType合计方式。CustomSummaryCalculate事件可处理//Footer行自定义列合计GridViewview=senderasGridView;if{decimalx=Convert.ToDecimal;decimaly=Convert.ToDecimal;view.Columns["RateZk"].SummaryItem.DisplayFormat="{0:P}";)e.TotalValue=x/y;elsee.TotalValue=;}GridContro导出Excel操作:SaveFileDialogsaveFileDialog=newSaveFileDialog();saveFileDialog.Title="导出Excel";saveFileDialog.Filter="Excel文件|*.xls";DialogResultdialogResult=saveFileDialog.ShowDialog;if{this.gvbrowse.OptionsPrint.AutoWidth=false;//设置导出的Excel自动调整列宽,列宽和控件的列宽一致this.gcbrowse.ExportToXls;//this.gcbrowse.ExportToXlsOld;//这个方法默认会自动调整列宽,但是office10以上版本有的会报错DevExpress.XtraEditors.XtraMessageBox.Show("保存成功!

DisplayFormat 设置显示格式如:{0:P}表示显示为百分号模式。如数据源中为0.5。表示出来为50%

2、GridContro总合计及分组合计:

常规总合计直接RunDesigner-Group Summary Items

DisplayFormat 设置显示格式如:{0:P}表示显示为百分号模式。如数据源中为0.5。表示出来为50%

FieldName 设置显示的对应列

ShowInGroupColumnFooter 在那一列下面显示

SummaryType 合计方式。选择Custom表示自定义。CustomSummaryCalculate事件可处理

//Footer行自定义列合计
  GridView view = sender asGridView;
  if (e.Item == view.Columns["RateZk"].SummaryItem)
  {
    decimal x = Convert.ToDecimal(view.Columns["RetailFAmount"].SummaryItem.SummaryValue);
    decimal y = Convert.ToDecimal(view.Columns["RetailAmount"].SummaryItem.SummaryValue);
    view.Columns["RateZk"].SummaryItem.DisplayFormat = "{0:P}";
    )
    e.TotalValue = x /y;
    else
    e.TotalValue =;
  }

GridContro导出Excel操作:

SaveFileDialog saveFileDialog = newSaveFileDialog();
   saveFileDialog.Title = "导出Excel";
   saveFileDialog.Filter = "Excel文件(*.xls)|*.xls";
   DialogResult dialogResult = saveFileDialog.ShowDialog(this);
   if (dialogResult ==DialogResult.OK)
   {
     this.gvbrowse.OptionsPrint.AutoWidth = false; //设置导出的Excel自动调整列宽,列宽和控件的列宽一致
     this.gcbrowse.ExportToXls(saveFileDialog.FileName);
     //this.gcbrowse.ExportToXlsOld(saveFileDialog.FileName);//这个方法默认会自动调整列宽,但是office10以上版本有的会报错
     DevExpress.XtraEditors.XtraMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     this.gvbrowse.OptionsPrint.AutoWidth = true;
   }

GridControl列要显示百分号:

Run Designer-Columns列 FormatType="Numeric" FormatString="p"

自动调整所有字段宽度 this.gridView1.BestFitColumns();

显示滚动条:gridView1.OptionsView.ColumnAutoWidth属性是true,即各列的宽度自动调整,你把它设成false,就会出现了。

设置奇、偶行交替颜色

  • OptionsView.EnableAppearanceEvenRow =true;OptionsView.EnableAppearanceOddRow =true;

MultiSelect = true; //设置可多选

MultiSelectMode =CellSelect/RowSelect;//多选行还是多选单元格(一般选RowSelect)

//禁用标题行过滤

AllowFilter = false;

//禁用标题行排序

AllowSort = false;

//禁止列移动

AllowColumnMoving = false;

//禁止改变列宽

AllowColumnResizing = false;

FocusRectStyle = None;//取消点击后的虚线框

下拉框清空

1、清值 comboboxedit2.editvalue=null;

2、清列表 comboboxedit2.properties.items.clear();

GridView 设置选中行的颜色

GridView : Run Designer -> Appearences : selectRow & FocusedRow (两项都要设置)

BackColor : MediumSlateBlue 背景色

ForeColor : White 前景色 字体颜色

GridView 设置标题行以及内容行 数据居中

标题行 10 所述 在HeadPanel 里有一个TextOptions 展开之后 将HAlignment : Center

如果是将内容行数据居中.有两种方法 1 : 逐行设置 2 : 设置Appearences

1 : GridView -> Run Designer -> Columns -> AppearanceCell -> TextOptions 找到HAlignment : Center .

2 : GridView -> Run Designer -> Appearance -> ViewCaption -> TextOptions -> HAlignment : Center

GridView 添加 序号 列

GridView : Run Designer -> Event -> CustomDrawRowIndicator

在事件中添加代码

public static void DrawRowIndicator(this GridView gridView, int width = 40, string headTitle = "行号")
        {
            gridView.CustomDrawRowIndicator += (sender, e) =>
            {
                e.Appearance.TextOptions.HAlignment =DevExpress.Utils.HorzAlignment.Center;
                if (e.Info.Kind ==DevExpress.Utils.Drawing.IndicatorKind.Header)
                {
                    e.Appearance.DrawBackground(e.Cache, e.Bounds);
                    e.Appearance.DrawString(e.Cache, headTitle, e.Bounds);
                    e.Handled = true;
                }
                if(e.Info.IsRowIndicator)
                {
                    if (e.RowHandle >= 0)
                    {
                        e.Info.DisplayText = (e.RowHandle + 1).ToString();
                    }
                    else if (e.RowHandle < 0 && e.RowHandle > -1000)
                    {
                        e.Info.Appearance.BackColor =System.Drawing.Color.AntiqueWhite;
                        e.Info.DisplayText = "G" +e.RowHandle.ToString();
                    }
                }
            };
            gridView.IndicatorWidth = width != 0 ? width : 40;
        }

另外在 Run Desginer -> IndicatorWidth 设置序号列的宽度 一般50左右就比较适合一些了.

汉化按钮提示:

        public classChEditLocalizer : Localizer
        {
            //重载 GetLocalizedString 方法
            public override stringGetLocalizedString(StringId id)
            {
                switch(id)
                {
                    //Button 按钮汉化
                    caseStringId.XtraMessageBoxOkButtonText:
                        return "确认";
                    caseStringId.XtraMessageBoxCancelButtonText:
                        return "取消";
                    caseStringId.XtraMessageBoxAbortButtonText:
                        return "退出";
                    caseStringId.XtraMessageBoxRetryButtonText:
                        return "重试";
                    caseStringId.XtraMessageBoxIgnoreButtonText:
                        return "忽略";
                    caseStringId.XtraMessageBoxYesButtonText:
                        return "";
                    caseStringId.XtraMessageBoxNoButtonText:
                        return "";
                }
                return base.GetLocalizedString(id);
            }
        }
 public classXtraGrid_CN : GridLocalizer 
    {
        public override stringGetLocalizedString(GridStringId id)
        {
            switch(id)
            {
                case GridStringId.ColumnViewExceptionMessage:return "是否进行更正?";
            }
            return base.GetLocalizedString(id);
        }
    }

皮肤设置:

  DevExpress.UserSkins.OfficeSkins.Register(); //注册office的皮肤 请先加入引用office的dll文件,关于如何引用 请看下文
            DevExpress.UserSkins.BonusSkins.Register(); //注册BonusSkins的皮肤
           if (!DevExpress.Skins.SkinManager.AllowFormSkins)
               DevExpress.Skins.SkinManager.EnableFormSkins();
            DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = "Black"; //默认黑背景

DevExpress实现GridView当无数据行时提示消息 https://ctolib.com/topics-51130.html

/// <summary>
///设置当没有数据行的提示信息『CustomDrawEmptyForeground』
/// </summary>
/// <param name="gridView">GridView</param>
/// <param name="e">CustomDrawEventArgs</param>
/// <param name="noRecordMsg">提示信息</param>
public static void DrawNoRowCountMessage(this GridView gridView, CustomDrawEventArgs e, stringnoRecordMsg)
{
  if (gridView == null)
 throw new ArgumentNullException("gridView");
  if (gridView.RowCount == 0)
  {
 if (!string.IsNullOrEmpty(noRecordMsg))
 {
   Font _font = new Font("宋体", 10, FontStyle.Bold);
   Rectangle _r = new Rectangle(e.Bounds.Left + 5, e.Bounds.Top + 5, e.Bounds.Width - 5, e.Bounds.Height - 5);
   e.Graphics.DrawString(noRecordMsg, _font, Brushes.Black, _r);
 }
  }
}

代码使用方法如下:

private void gvLampTotal_CustomDrawEmptyForeground(objectsender, DevExpress.XtraGrid.Views.Base.CustomDrawEventArgs e)
{
  gvLampTotal.DrawNoRowCountMessage(e, "暂无符合的数据!");
}

Dev属性设置第1张

DevExpress实现GridControl列头绘制Checkbox的方法 https://ctolib.com/topics-51144.html http://aloysians.com/blog/getInfo/52837/1491226375

/// <summary>
///为列头绘制CheckBox
/// </summary>
/// <param name="view">GridView</param>
/// <param name="checkItem">RepositoryItemCheckEdit</param>
/// <param name="fieldName">需要绘制Checkbox的列名</param>
/// <param name="e">ColumnHeaderCustomDrawEventArgs</param>
public static void DrawHeaderCheckBox(this GridView view, RepositoryItemCheckEdit checkItem, stringfieldName, ColumnHeaderCustomDrawEventArgs e)
{
  /*说明:
   *参考:https://www.devexpress.com/Support/Center/Question/Details/Q354489
   *在CustomDrawColumnHeader中使用
   *eg:
   * private void gvCabChDetail_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
   * {
   * GridView _view = sender as GridView;
   * _view.DrawHeaderCheckBox(CheckItem, "Check", e);
   * }
   */
  if (e.Column != null &&e.Column.FieldName.Equals(fieldName))
  {
 e.Info.InnerElements.Clear();
 e.Painter.DrawObject(e.Info);
 DrawCheckBox(checkItem, e.Graphics, e.Bounds, getCheckedCount(view, fieldName) ==view.DataRowCount);
 e.Handled = true;
  }
}
private static void DrawCheckBox(RepositoryItemCheckEdit checkItem, Graphics g, Rectangle r, boolChecked)
{
  CheckEditViewInfo _info;
  CheckEditPainter _painter;
  ControlGraphicsInfoArgs _args;
  _info = checkItem.CreateViewInfo() asCheckEditViewInfo;
  _painter = checkItem.CreatePainter() asCheckEditPainter;
  _info.EditValue =Checked;
  _info.Bounds =r;
  _info.PaintAppearance.ForeColor =Color.Black;
  _info.CalcViewInfo(g);
  _args = new ControlGraphicsInfoArgs(_info, newDevExpress.Utils.Drawing.GraphicsCache(g), r);
  _painter.Draw(_args);
  _args.Cache.Dispose();
}
private static int getCheckedCount(GridView view, stringfiledName)
{
  int count = 0;
  for (int i = 0; i < view.DataRowCount; i++)
  {
 object _cellValue =view.GetRowCellValue(i, view.Columns[filedName]);
 if (_cellValue == null) continue;
 if (string.IsNullOrEmpty(_cellValue.ToString().Trim())) continue;
 bool _checkStatus = false;
 if (bool.TryParse(_cellValue.ToString(), out_checkStatus))
 {
   if(_checkStatus)
 count++;
 }
  }
  returncount;
}

使用方法如下:

RepositoryItemCheckEdit CheckItem = newRepositoryItemCheckEdit();
const string gcCheckFieldName = "Checked";
private void gvLampConfig_CustomDrawColumnHeader(objectsender, ColumnHeaderCustomDrawEventArgs e)
{
  GridView _view = sender asGridView;
  _view.DrawHeaderCheckBox(CheckItem, gcCheckFieldName, e);
}

实际写法:

   private bool _mCheckStatus;     //选中状态
        private void gvCrabsRequisition_CustomDrawColumnHeader(objectsender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
        {
            if (e.Column != null && e.Column.FieldName == "CheckState")
            {
                e.Info.InnerElements.Clear();
                e.Painter.DrawObject(e.Info);
                DevControlHelper.DrawCheckBox(e, _mCheckStatus);
                e.Handled = true;
            }
        }
        public static void DrawCheckBox(ColumnHeaderCustomDrawEventArgs e, boolchk)
        {
            var repositoryCheck = e.Column.ColumnEdit asRepositoryItemCheckEdit;
            if (repositoryCheck == null) return;
            var g =e.Graphics;
            var r =e.Bounds;
            var info = repositoryCheck.CreateViewInfo() asCheckEditViewInfo;
            var painter = repositoryCheck.CreatePainter() asCheckEditPainter;
            if (info == null) return;
            info.EditValue =chk;
            info.Bounds =r;
            info.CalcViewInfo(g);
            var args = new ControlGraphicsInfoArgs(info, newGraphicsCache(g), r);
            painter?.Draw(args);
            args.Cache.Dispose();
        }
        private void gvCrabsRequisition_Click(objectsender, EventArgs e)
        {
            if (DevControlHelper.ClickGridCheckBox(gvCrabsRequisition, "CheckState", _mCheckStatus))
            {
                _mCheckStatus = !_mCheckStatus;
            }
        }

默认的数字、日期等输入,都要切换输入法才可以输入,不能默认就支持数字的输入,那么是否有办法解决呢

记得逢数字,日期的控件,必须设置ImeMode=Off 。

设置指定列可以编辑

        private void gvCrabsRequisition_ShowingEditor(objectsender, CancelEventArgs e)
        {
            GridView _view = sender asGridView;
            List<string> editList = new List<string>() { "colWarehouseRequisedActualAmountAdd", "colCheckState"};
            if (editList.Contains(_view.FocusedColumn.Name) == false)
            {
                e.Cancel = true;
            }
        }

设置gridview默认属性

        /// <summary>
        ///设置girdView默认属性
        /// </summary>
        /// <param name="gv"></param>
        public static voidSetStyle(DevExpress.XtraGrid.Views.Grid.GridView gv)
        {
            /*
              * author:wxm
              * date  :2014年7月25日10:59:08
              * */
            gv.OptionsView.ShowGroupPanel = false; //不允许自定义分组
            gv.RowHeight = 22;  //行高22
            gv.OptionsView.ShowFooter = false;  //不显示页脚
            //表头行高设置为24、分组行高设置为35(为仅有一级分组的行高)
            gv.ColumnPanelRowHeight = 24;
            gv.GroupRowHeight = 35;
            //列表中最前面的空白列的宽度设置为12
            gv.IndicatorWidth = 12;
            //设置列表是否多选、多选的模式(行或单元格)、选择的行或单元格背景是否倒置
            gv.OptionsSelection.MultiSelect = false;
            gv.OptionsSelection.MultiSelectMode =DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect;
            gv.OptionsSelection.InvertSelection = false;
            gv.OptionsSelection.EnableAppearanceFocusedCell = false;
            //允许编辑
            gv.OptionsBehavior.Editable = true;
            //不显示分组面板
            gv.OptionsView.ShowGroupPanel = false;
            //不允许用户进行过滤和分组
            gv.OptionsCustomization.AllowFilter = false;
            gv.OptionsCustomization.AllowGroup = false;
            //允许用户拖动列和不允许进行列排序
            gv.OptionsCustomization.AllowColumnMoving = true;
            gv.OptionsCustomization.AllowSort = false;
            //列标题垂直居中
            gv.Appearance.HeaderPanel.Options.UseTextOptions = true;
            gv.Appearance.HeaderPanel.TextOptions.HAlignment =DevExpress.Utils.HorzAlignment.Center;
            gv.Appearance.HeaderPanel.TextOptions.VAlignment =DevExpress.Utils.VertAlignment.Center;
            //将数据行内容垂直,文字左对齐,数字右对齐
            //gv.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            //gv.Appearance.Row.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;
            //HAlignment(水平位置):Far(数字右对齐)/Near(文字、日期左对齐)
            //不显示右键菜单
            gv.OptionsMenu.EnableColumnMenu = false;
            //自动过滤时不显示过滤记录
            gv.OptionsView.ShowFilterPanelMode =DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
        }

参考:https://zhidao.baidu.com/question/1174521530470594219.html

校验数据有效性:

        /// <summary>
        ///校验更改后单元格数据有效性
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void gvCrabsRequisition_ValidateRow(objectsender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            try
            {
                var list = gcCrabsRequisition.DataSource as List<GetCrabStockRequisitionItem>;
                if(list.IsHasRow())
                {
                    var lstCheck = list.Where(r =>r.CheckState).ToList();
                    //选中1个才校验
                    if (lstCheck.Count == 1)
                    {
                        GridView view = sender asGridView;
                        GridColumn _productId = view.Columns["ProductId"];//原料Id
                        GridColumn _submitAmount = view.Columns["WarehouseRequisedActualAmountAdd"];//本次调拨数量
                        Guid productId =(Guid)view.GetRowCellValue(e.RowHandle, _productId);
                        var cellAmout =view.GetRowCellValue(e.RowHandle, _submitAmount);
                        decimal submitAmount = cellAmout.IsNull() ? 0 : (decimal)cellAmout;
                        //var serachAmount = _kvSerchActualAmountList.FirstOrDefault(s => s.Key == productId).Value;
                        var regex = new Regex(@"^d+$");    //正则 判断非负整数
                        if(regex.IsMatch(submitAmount.ToString()))
                        {
                            view.SetColumnError(_submitAmount,"本次调拨数量在更改后必须是正整数!");
                        }
                        //if (submitAmount > serachAmount)
                        //{
                        //e.Valid = false;
                        //view.SetColumnError(_submitAmount, "数量在更改后不能超过之前查询的结果值,请检查!");
                        //return;
                        //}
                        if (submitAmount <= 0 || string.IsNullOrEmpty(submitAmount.ToString()))
                        {
                            e.Valid = false;
                            view.SetColumnError(_submitAmount, "数量在更改后大于0才能提交,请检查!");
                            return;
                        }
                        if(e.Valid)
                        {
                            view.ClearColumnErrors();
                        }
                    }
                }
            }
            catch(Exception ex)
            {
                MessageCommon.ShowWar($"校验异常:{ex.Message}");
            }
        }

DevExpress中GridControl中实现checkbox多行选中

在我们要绑定的容器中添加一个新列

我用的是DataTable 在DataTable中添加一个新列代码如下

            //新建一个数据表 probll.GetProductAll自己写的方法
            DataTable db = probll.GetProductAll(4, pageIndex, "申请中", 0, outpageCount);
            //在表中增加一个列 add(列名,列类型)
            db.Columns.Add("check", typeof(bool));
            //给每一行的该列赋值
            for (int i = 0; i < db.Rows.Count; i++)
            {
                db.Rows[i]["check"] = "false";
            } 

注意:新增列的类型为bool类型

设置可以多选

gridView1 .OptionsSelection.MultiSelect = true; 
gridView1 .OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect;

设置获取选中行的需要值

string value="";  
          string strSelected="";  
            for (int i = 0; i < gridView1.RowCount; i++)  
           {   //获取选中行的check的值       
               value = gridView1.GetDataRow(i)["check"].ToString();  
               if (value == "True")  
               {
                 //productid 是我绑定数据表的字段 可以自己根据需求定义 这样就可以实现文中开始处的功能了                
                 strSelected += gridView1.GetRowCellValue(i, "productid");
                }             
           }

原文:http://blog.csdn.net/l1158513573/article/details/46502569

gridControl:给该列添加组件(如按钮)  三种方法
法一:打开设计器(Run Designer),选择左侧Repository,点击In-place Editor Repository(内嵌编辑器),点击Add右侧的下拉菜单
,选择你想添加的控件,比如ComboBoxEdit,再在右侧编辑控件的属性,ComboBox的话就可以设置Data下的Items集合,然后点左侧
Main里的Columns,点你想在上头添加控件的列,找右侧Data下的ColumnEdit,点最右边的下拉菜单,点Existing左侧的加号,就能找
到你刚才的控件,添加。会默认给该列的每一个格都加上这个控件。
法二:点击你想添加控件的列标题,再点属性栏中的ColumnEdit,下拉菜单点new,选择想添加的控件,然后Column Edit左侧会出现加
号,展开加号,下方会出现许多子属性,这些都是设置内嵌的控件的属性的。
法三:直接写代码。
②       拖动一个gridControl控件,改变视图为BandedGridview,属性栏中点OptionView,选择NewItemRowPosition,选Bottom
②添加引用:usingDevExpress.XtraGrid.Views.BandedGrid;
form的构造函数中添加代码:
BandedGridColumn newColumn = bandedGridView1.Columns.Add() asBandedGridColumn;
           newColumn.Caption = "Country";
           bandedGridView1.Bands[0].Columns.Add(newColumn);
            newColumn.Visible = true;
②(假设添加的控件是计算器)添加引用:usingDevExpress.XtraEditors.Repository;
form的构造函数中继续添加代码,效果图
RepositoryItemCalcEdit calcEdit = newRepositoryItemCalcEdit();
           gridControl.RepositoryItems.Add(calcEdit);
            newColumn.ColumnEdit = calcEdit;

原文:http://blog.csdn.net/qq_30756923/article/details/77982536 整理GridControl层级表格及按钮列

参考:

http://www.cnblogs.com/DeepLearing/p/3887601.html DevExpress GridView 那些事儿

http://blog.csdn.net/wsnwxm/article/details/7486606    DevExpress控件汉化教程详解

http://blog.csdn.net/wsnwxm/article/details/7483900 DXperience皮肤设置 C#第三方控件学习笔记

http://group.pandorabox.cn/forum.php?mod=viewthread&tid=266 汉化提示

https://ctolib.com/topics-51073.html

DevExpress根据条件设置GridControl RepositoryItem(设定指定列)是否可编辑

http://www.cnblogs.com/DeepLearing/p/3927358.html修改DevExpress中英文提示,将英文改为中文

http://www.cnblogs.com/YanZhiwei/p/3277455.html [DevExpress]实现GridControl输入验证

http://www.cnblogs.com/wuhuacong/archive/2012/07/17/2595182.html DevExpress控件开发常用要点(项目总结版)

http://blog.csdn.net/yangyifan0/article/details/11988585 DEVexpress GridControl 属性设置

免责声明:文章转载自《Dev属性设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle常用监控sql语句3月18日 winform页面设置与打印下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在使用远程桌面时如何修改当前用户密码

在使用远程桌面时有以下几种方法可以修改当前用户密码: 1. Ctrl+Alt+End 使用这个组合键的效果和本机使用Ctrl+Alt+Del一样,它是专门针对远程桌面的。但如果是远程桌面在套远程桌面,那就无法正常工作了,因为它只能在第一层工作。遇到这种情况,就只是使用下边的方法了。 2. 开始->设置->windows安全性 此时的效果和Ctr...

树莓派系统备份及还原

树莓派系统备份及还原 目前常见的备份方式是用Win32DiskImager进行全卡备份,该方法的缺点是备份文件会和SD卡的容量一致,而且在还原的时候必须使用比镜像更大容量的SD卡。 还有一种方式是压缩备份,是将需要备份的SD卡的内存压缩至树莓派使用的内存大小。方法是先在Linux环境中将 root分区拆分内容空间和空白空间,然后在Windows上用Win3...

MySQL 的简单介绍及实施

MySQL原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被Sun公司收购。2009年,甲骨文公司收购Sun公司,MySQL成为Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统(RDBMS)之一。 1. 数据库产品时代演变 第一代数据库架构:合的时代 RDBMS 关系型数据库时代   代...

Linux的PCI驱动分析

1. 关键数据结构 PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/pro...

Linux音频编程

虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序,同时还给出了一些常用的音频编程框架。 一、数字音频 音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然音源得到的音频信号必须经过一定的变换,成为数字音...

linux中apt-get使用

apt-get简介 在Ubuntu系统中,经常要用到apt-get install指令来安装软件,由于常常需要root权限来操作,所以搭配sudo食用口感更佳,apt-get指令对于安装、卸载、升级软件提供一条龙服务,对比于源码安装,实在是业界良心。 源码安装 源码安装的流程一般是三部曲: ./configure make make install...