也遇到了各种各样的问题 和不同的解决方案
所以呢我想收集一些常见问题 方便各位参考
现在大家把问题和答案贴上吧呵呵
我看见很多关于水晶报表和excel导入导出还有word等等许多问题
现在请大家发表意见
// <summary>
/// 合并GridView列中相同的行
/// </summary>
/// <param name="GridView1">GridView对象</param>
/// <param name="cellNum">需要合并的列</param>
public static void GroupRows(GridView GridView1, int cellNum)
{
int i = 0, rowSpanNum = 1;
while (i < GridView1.Rows.Count - 1)
{
GridViewRow gvr = GridView1.Rows[i];
for (++i; i < GridView1.Rows.Count; i++)
{
GridViewRow gvrNext = GridView1.Rows[i];
if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
{
gvrNext.Cells[cellNum].Visible = false;
rowSpanNum++;
}
else
{
gvr.Cells[cellNum].RowSpan = rowSpanNum;
rowSpanNum = 1;
break;
}
if (i == GridView1.Rows.Count - 1)
{
gvr.Cells[cellNum].RowSpan = rowSpanNum;
}
}
}
}
/// <summary>
/// 根据条件列合并GridView列中相同的行
/// </summary>
/// <param name="GridView1">GridView对象</param>
/// <param name="cellNum">需要合并的列</param>
/// /// <param name="cellNum2">条件列(根据某条件列还合并)</param>
public static void GroupRows(GridView GridView1, int cellNum, int cellNum2)
{
int i = 0, rowSpanNum = 1;
while (i < GridView1.Rows.Count - 1)
{
GridViewRow gvr = GridView1.Rows[i];
for (++i; i < GridView1.Rows.Count; i++)
{
GridViewRow gvrNext = GridView1.Rows[i];
if (gvr.Cells[cellNum].Text + gvr.Cells[cellNum2].Text == gvrNext.Cells[cellNum].Text + gvrNext.Cells[cellNum2].Text)
{
gvrNext.Cells[cellNum].Visible = false;
rowSpanNum++;
}
else
{
gvr.Cells[cellNum].RowSpan = rowSpanNum;
rowSpanNum = 1;
break;
}
if (i == GridView1.Rows.Count - 1)
{
gvr.Cells[cellNum].RowSpan = rowSpanNum;
}
}
}
}
#region 导入
/// <summary>
/// 点击读取按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnReadFile_Click(object sender, EventArgs e)
{
//打开一个文件选择框
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "Excel文件";
ofd.FileName = "";
//为了获取特定的系统文件夹,
//可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
ofd.Filter = "Excel文件(*.xlsx)|*xlsx";
ofd.ValidateNames = true;//文件有效性验证ValidateNames,验证用户输入是否是一个有效的windows文件名
ofd.CheckFileExists = true;//验证路径有效性
ofd.CheckPathExists = true;//验证文件有效性
string strName = this.txtPutInFile.Text;
if (strName == "")
{
MessageBox.Show("没有选择excel文件!!无法导入--!!");
return;
}
PreExitExcel();
EcxelToDataGridView(strName, this.dgvEmail);
//MessageBox.Show("导入成功!!!");
}
/// <summary>
/// excel数据导入方法
/// </summary>
/// <param name="filePath"></param>
/// <param name="dgv"></param>
public void EcxelToDataGridView(string filePath, DataGridView dgv)
{
//根据路径打开一个excel文件并将数据填充到dataset中
string strConn = @"Provider = Microsoft.Ace.OLEDB.12.0; Data Source = " + filePath + "; Extended Properties = 'Excel 12.0;HDR = NO; IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
strExcel = "select * from [sheet1$]";
DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
string tableName = schemaTable.Rows[0][2].ToString().Trim();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
DataSet ds = new DataSet();
myCommand.Fill(ds, "table1");
//根据DataGridView的列构造一个DataTable
DataTable td = ds.Tables[0];
try
{
//MessageBox.Show(td.ToString());
foreach (DataGridViewColumn dgvc in dgv.Columns)
{
if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
{
DataColumn dc = new DataColumn();
dc.ColumnName = dgvc.DataPropertyName;
dc.DataType = dgvc.ValueType;
//MessageBox.Show(dc.ToString());
td.Columns.Add(dc);
}
}
//根据excel的行逐一对上面的构造的datatable的列进行赋值
for (int i = 0; i < ds.Tables[0].Rows.Count - 1; i++)
{
//int j = 0;
DataRow dr = td.NewRow();
DataRow excelRow = ds.Tables[0].Rows[i];
foreach (DataColumn dc in td.Columns)
{
dr[dc] = excelRow[i];
//MessageBox.Show(dr[dc].ToString());
i++;
}
td.Rows.Add(dr);
}
//在datagridview中显示导入的数据
dgv.DataSource = td;
}
catch (Exception)
{
MessageBox.Show("该表已存在你即将导入的excel文件...,请点击清空按钮重新导入...");
return;
}
finally
{
conn.Close();
}
}
/// <summary>
/// 预关闭未退出的Excel进程方法
/// </summary>
public void PreExitExcel()
{
System.Diagnostics.Process[] allProcess = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process thisprocess in allProcess)
{
string processName = thisprocess.ProcessName;
if (processName.ToLower() == "excel")
{
try
{
thisprocess.Kill();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return;
}
}
}
}
#endregion
/// <summary>
/// 需要添加引用com中的"microsoft excel 11.0 object library"
/// </summary>
///
/// <param name="mydgv"></param>
public void Exportdatagridviewtoexcel(DataGridView mydgv)
{
if (mydgv.Rows.Count == 0)
{
MessageBox.Show(" 没有数据可供导出!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
SaveFileDialog savedialog = new SaveFileDialog();
savedialog.DefaultExt = "xlsx";
savedialog.Filter = "microsoft office execl files (*.xlsx)|*.xlsx";
savedialog.FilterIndex = 0;
savedialog.RestoreDirectory = true;
savedialog.Title = "导出数据到excel表格";
savedialog.ShowDialog();
if (savedialog.FileName.IndexOf(":") < 0) return; //被点了取消
//Microsoft.office.interop.excel.application xlapp = new microsoft.office.interop.excel.application();
Microsoft.Office.Interop.Excel.Application xlapp = new Microsoft.Office.Interop.Excel.Application();
if (xlapp == null)
{
MessageBox.Show("可能您的机子未安装excel,无法创建excel对象!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlapp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//定义表格内数据的行数和列数
int rowscount = mydgv.Rows.Count;
int colscount = mydgv.Columns.Count;
//行数不可以大于65536
if (rowscount > 65536)
{
MessageBox.Show("数据行记录超过65536行,不能保存!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//列数不可以大于255
if (colscount > 256)
{
MessageBox.Show("数据列记录超过256列,不能保存!", "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//写入标题
for (int i = 0; i < mydgv.ColumnCount; i++)
{
worksheet.Cells[1, i + 1] = mydgv.Columns[i].HeaderText;
}
//写入数值
for (int r = 0; r < mydgv.Rows.Count; r++)
{
for (int i = 0; i < mydgv.ColumnCount; i++)
{
if (mydgv[i, r].ValueType == typeof(string))
{
worksheet.Cells[r + 2, i + 1] = "" + mydgv.Rows[r].Cells[i].Value;//将长数值转换成文本
}
else
{
worksheet.Cells[r + 2, i + 1] = mydgv.Rows[r].Cells[i].Value;
}
}
System.Windows.Forms.Application.DoEvents();
}
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
if (savedialog.FileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(savedialog.FileName);
}
catch (Exception ex)
{
MessageBox.Show("导出文件时出错,文件可能正被打开!..." + ex.Message, "系统提示 ", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//GC.Collect();//强行销毁
MessageBox.Show("数据导出成功! ", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
//关闭excel进程
if (xlapp != null)
{
xlapp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlapp);
foreach (System.Diagnostics.Process theProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
{
//先关闭图形窗口。如果关闭失败...有的时候在状态里看不到图形窗口的excel了,
//但是在进程里仍然有EXCEL.EXE的进程存在,那么就需要杀掉它:p
if (theProc.CloseMainWindow() == false)
{
theProc.Kill();
}
}
xlapp = null;
}
}
}
public int Pages
{
get { return int.Parse(ViewState["page"].ToString()); }
set { ViewState["page"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Pages = 1;
//string no = Request.QueryString["page"];
//Pages = no == null ? 1 : int.Parse(no);
PageShow();
URLPaged();
}
// BindRepeater();
} #region 光棒效果
protected void rptBook_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
HtmlTableRow tr = e.Item.FindControl("tr") as HtmlTableRow;
tr.Attributes.Add("onmouseover", "color=this.style.backgroundColor;this.style.backgroundColor='red'");
tr.Attributes.Add("onmouseout", "this.style.backgroundColor=color");
}
}
#endregion
#region post分页
public void PageShow()
{
PagedDataSource pds = new PagedDataSource();
//为pagedDataSource设置数据源
BookInfoBll bookbll = new BookInfoBll();
pds.DataSource = bookbll.GetAll();
//设置Repeater的数据源为PagedDataSource
this.rptBook.DataSource = pds;
//允许分页
pds.AllowPaging = true;
//设置分页的条数
pds.PageSize = 4;
ViewState["count"] = pds.PageCount;
pds.CurrentPageIndex = Pages - 1;
//得到当前页和总也数
this.lnkup.Enabled = true;
this.lnkDwon.Enabled = true;
if (pds.IsFirstPage)
{
lnkup.Enabled = false;
}
if (pds.IsLastPage)
{
lnkDwon.Enabled = false;
}
this.rptBook.DataBind();
}
//首页
protected void lnkStart_Click(object sender, EventArgs e)
{
Pages = 1;
PageShow();
}
//下一页
protected void lnkup_Click(object sender, EventArgs e)
{
Pages--;
PageShow();
}
//上一页
protected void lnkDwon_Click(object sender, EventArgs e)
{
Pages++;
PageShow();
}
//尾页
protected void lnkLast_Click(object sender, EventArgs e)
{
Pages = int.Parse(ViewState["count"].ToString());
PageShow();
}
#endregion
#region Url分页
public void URLPaged()
{
PagedDataSource pds = new PagedDataSource();
BookInfoBll bookbll = new BookInfoBll();
pds.AllowPaging = true;
pds.PageSize = 4;
List<BookInfo> lst = bookbll.GetAll();
//List<BookInfo> list = lst.Skip((pds.PageSize) * (Pages - 1)).Take(pds.PageSize).ToList();
pds.DataSource = lst;
ViewState["count"] = pds.PageCount;
//pds.VirtualCount = lst.Count;
//pds.CurrentPageIndex = Pages - 1;
//Response.Write(Pages);
if (Request.QueryString["page"] != null)
{
Pages = int.Parse(Request.QueryString["page"].ToString());
}
pds.CurrentPageIndex = Pages - 1;
//int pageTotal = (pds.VirtualCount + (pds.PageSize - 1)) / pds.PageSize;
//hykLast.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + pageTotal;
//hykStart.NavigateUrl = Request.CurrentExecutionFilePath + "?page=1";
//hykUp.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (Pages - 1);
//hykDwon.NavigateUrl = Request.CurrentExecutionFilePath + "?page="+(Pages+1);
//if (Pages == 1)
//{
// hykUp.NavigateUrl = "";
//}
//if (Pages == pageTotal)
//{
// hykDwon.NavigateUrl = "";
//}
if (!pds.IsFirstPage)
{
hykUp.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (Pages - 1);
hykStart.NavigateUrl=Request.CurrentExecutionFilePath;
}
if (!pds.IsLastPage)
{
hykDwon.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + (Pages + 1);
hykLast.NavigateUrl =Request.CurrentExecutionFilePath+ "?page="+ ViewState["count"];
}
this.rptBook.DataSource = pds;
this.DataBind();
}
#endregion
现在的流行趋势是桌面程序Web化,Web程序桌面化,呵呵。最终目标就是你中有我,我中有你。例如MSN Explorer就是一个...本着简单就是美的设计思想,这里给出一个轻量级的解决方法,把ASP.NET嵌入到普通WinForm桌面程...
.NET是微软公司下的一个开发平台,在这个平台下可以用不同的语言进行开发,如 C#、 F#、 Visual Basic等语言来编写.NET应用程序。 JAVA和.NET不同的一点是java是跨平台的,不跨语言的。而.NET构建的应用程序,有些是...
有的东西要扼杀在摇篮里面,比如不懂的知识点,比如Asp.Net是什么,.Net是什么,winform是什么,C#又是什么,它们之间又有什么样的关系,要不走到后面不懂的越来越多,简单问题也因为畏惧复杂化了~!
技术上有两个框架:ASP.NET和ASP.NET Core,它们分别基于.NET Framework和.NET Core构建。 当Microsoft首次尝试创建一个遵循MVC模式的“现代”Web应用程序平台时,它将这个新平台称为“ASP.NET MVC”,以区别于以前...
2020.11.10日DOTNET正式发布.NET 5.0,.NET 5.0 是 3.1 之后 .NET Core 的下一个主要版本,可以理解为.NET 5.0 = .net core vnext。为不叫 .NET Core 4.0 官网上描述主要有两个原因:1. 跳过了版本号 4.x 以避免与 ...
2020 中国.NET 开发者峰会正式启动,欢迎大家提交演讲主题或者购买超级早鸟票。今年11月10号 .NET 5.0 如约而至。这是.NET All in one后的第一个版本,虽然不是LTS(Long term support)版本,但是是生产环境可用的。...
开启.NET5时代2020-09-14从NetCore1.1开始学起,然后又从2.0开始讲知识,再到将所有的在线项目升级并长期维护到3.1,转眼已经三年了,一直紧跟着微软的节奏有条不紊的往前走,我相信,只要是从18年末或者19年初跟着...
.NET、ASP.NET、C# 三者之间的关系 ASP.NET 和 .NET 是一个概念,后者是前者的简称,它是一个平台,不是语言,一个跨语言运行的平台,各种各种的编程语言都可以在上面运行,例如:VB,J#,C# 等。 C# 是一门编程...
这是C#中的Socket用套接字实现一个服务器与多个客户端的通信代码,希望能对初学者有个帮助!
WebForm是.net中用于开发web应用的一系列技术的通称。特点是使用统一的UI,就是web页面,统一的client端(客户端),浏览器。没有平台和浏览器限制(因为webform产生的页面是html 3.2兼容的)。WebForm页面构架是一...
无意中翻出WinForm多年前的代码,已将业务删除,这就是一个小工具,其中有些工具类,多余的没有整合。配置工具,新手参考学习,使用.net framework 4.0。 界面效果: 有需要的可以前往码云地址:...
二者应该是在一个作用域中,因为,Asp.net页面需要访问winfrom项目中的一些数据库访问程序,有哪位有过二者协同开发的经验,还请指教。 .NET技术Windows Forms SunshinePig | 初学一级 | 园豆:50 提问于:...
在全面开源的步伐下,微软也逐步跟上了脚步,作为微软最早迈向开源的重要软件之一,.NET 5的发布对微软及其使用者都具有重要意义。微软未来目标是将所有的 .NET 组件整合到一个产品下,然后用户可以根据需求使用 ...
三个窗口,第一个窗口有listbox,第二个窗口每个标签都是第一个窗口的单个item内容(已经可以同步两个值),第三个窗口的listbox要同步第一个窗口的listbox的内容,并且选中两个listbox中的值,再点击selection选中...
大家好,我用winform做了精品课程后台管理系统,实现了...前台是用asp.net网站!请问asp.net怎么从数据库里面读取用户图像和课件信息并显示呢?用了本地绝对路径,但是asp.net里面还是不显示呀?高手们帮帮忙,谢谢!
一、什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是...语言可以是C#,f#,j#,vb.net等等。JAVA和.NET不同的一点是java是跨平台的,不跨语言的。.NET跨平台仅限于安卓系统和IOS苹果系统。 .Net全称.NET F...
网站应用钉钉扫码登录开发,C#,asp.net 。 第三方web服务提供者,通过此项服务,可以使用钉钉用户扫码登录自有的系统,并可将自有系统的账号与钉钉账号进行绑定,同时还能够获取钉钉用户的个人及企业数据,如姓名、...
ADO.NET采用不同的Connection对象连接数据库。这篇文章主要介绍了Asp.Net(C#)使用oleDbConnection 连接Excel的方法,非常具有实用价值,需要的朋友可以参考下
所说MS出了ASP5,微软自己用的网络平台是基于.NET和ASP5的。MS能跑在.NET和ASP上,其它小网站当然不在话下。其实VS2019上,有MVC模式可参选,但初步印象好像不是Ruby on Rail那样的MVC实例化了。先搭个WebForm找找...
.NET、C#和ASP.NET三者之间的区别 一、什么是.NET? .NET是微软公司下的一个开发平台,.NET核心就是.NET Framwork(.NET框架)是.NET程序开发和运行的环境,在这个平台下可以用不同的语言进行开发,因为.NET是跨语言...
1、.NET是什么? .Net全称.NET Framework是一个开发和运行环境,该战略是微软的一项全新创意,它将使得“互联网行业进入一个更先进的阶段...C#是.NET Framework框架支持的一种主力开发语言,可用于开发ASP.NET网站,Wind
C#Winform开源视频播放器包括 VLC版本和MediaPlayer版本,两者都是通过本人亲自试验,完美运行。所有运行库齐全,放心下载。 包内还赠送ASP.NET版本的html5视频播放。 并且有一个测试例子。
1.使用ajax将前台数据传递到后台(将字符串messName传递到后台,接收返回的json数据,并进行处理)function getWarmMessages() { $.ajax({ type: "post", url: "Warning/Detailed"...
<asp:button id="Button1" runat="server" Text="记录日志" onclick="Button1_Click"></asp:button> ``` .cs后台程序 ``` protected void Button1_Click(object sender, System.EventArgs e) { 在...
由于现在会使用WinForm的人是越来越少了,可能有时候做点小东西就只好用ASP.NET去完成了(喜欢控制台的朋友请不要顶针), 如果是这样,悲剧就发生了:一个小工具(或者小的演示项目),发给朋友去用,总不至于让...
ASP.NET改变控件背景色的代码如下: Label1.BackColor = System.Drawing.Color.FromArgb(23, 189, 32); //RGB颜色值 Label1.BackColor = System.Drawing.Color.Red; //某一种纯色 Label1.BackColor = System....
网上搜到的很多方法拿到的只是iis程序的路径,下面两个获取当前文件的路径System.Web.HttpContext.Current.Server.MapPath(@"../test.txt")AppDomain.CurrentDomain.BaseDirectory
LayUi上传组件和C#
C#怎么用代码检测客户端是否安装了asp.net,可以用类似根据注册表判断客户端是否安装了某软件一样吗?
notepad++是一个免费的、开放源码的文本和源代码编辑器。notepad++是用c++编程语言编写的,它以减少不必要的功能和简化过程而自豪,从而创建了一个轻便高效的文本记事本程序。实际上,这意味着高速和易访问的、用户友好的界面。 notepad++已经存在了将近20年,没有任何迹象表明它的受欢迎程度会下降。记事本绝对证明了你不需要投资在昂贵的软件来编写代码从舒适的自己的家。自己尝试一下,你就会明白为什么Notepad能坚持这么久。