如何在datagridview里直接从文件复制多条数据粘贴

laolaixuebiancheng 2011-03-22 04:04:44
请教各位了
比如从EXCEL表格里面复制多条数据,在datagridview里面直接粘贴就存入数据库,其他数据用默认值,也可以选定这些数据后再次复制粘贴,比如先修改的是货物的名称列,再复制价格列,然后一起存入数据库
...全文
471 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
laolaixuebiancheng 2011-04-02
  • 打赏
  • 举报
回复
现在我将这段代码改了一下,直接存入数据库,调用此函数后,清除绑定的数据,重新绑定新数据,但出现新问题,就是最后一条数据刷新后不显示,再次刷新才显示,怎么解决
laolaixuebiancheng 2011-03-23
  • 打赏
  • 举报
回复
找到一个有用的,大家看看吧
public static void DataGirdViewCellPaste(DataGridView DBGrid)
{
try
{
// 获取剪切板的内容,并按行分割
string pasteText = "";
pasteText = Clipboard.GetText();

if (string.IsNullOrEmpty(pasteText))
return;
if (pasteText == "pasteText")
{
return;
}
int tnum = 0;
int nnum = 0;
//获得当前剪贴板内容的行、列数
for (int i = 0; i < pasteText.Length; i++)
{
if (pasteText.Substring(i, 1) == "\t")
{
tnum++;
}
if (pasteText.Substring(i, 1) == "\n")
{
nnum++;
}
}
Object[,] data;
//粘贴板上的数据来自于EXCEL时,每行末都有\n,在DATAGRIDVIEW内复制时,最后一行末没有\n
if (pasteText.Substring(pasteText.Length - 1, 1) == "\n")
{
nnum = nnum - 1;
}
tnum = tnum / (nnum + 1);
data = new object[nnum + 1, tnum + 1];//定义一个二维数组

String rowstr;
rowstr = "";
//MessageBox.Show(pasteText.IndexOf("B").ToString());
//对数组赋值
for (int i = 0; i < (nnum + 1); i++)
{
for (int colIndex = 0; colIndex < (tnum + 1); colIndex++)
{
//一行中的最后一列
if (colIndex == tnum && pasteText.IndexOf("\r") != -1)
{
rowstr = pasteText.Substring(0, pasteText.IndexOf("\r"));
}
//最后一行的最后一列
if (colIndex == tnum && pasteText.IndexOf("\r") == -1)
{
rowstr = pasteText.Substring(0);
}
//其他行列
if (colIndex != tnum)
{
rowstr = pasteText.Substring(0, pasteText.IndexOf("\t"));
pasteText = pasteText.Substring(pasteText.IndexOf("\t") + 1);
}
data[i, colIndex] = rowstr;
}
//截取下一行数据
pasteText = pasteText.Substring(pasteText.IndexOf("\n") + 1);
}
//获取当前选中单元格所在的列序号
int curntindex = DBGrid.CurrentRow.Cells.IndexOf(DBGrid.CurrentCell);
//获取获取当前选中单元格所在的行序号
int rowindex = DBGrid.CurrentRow.Index;
//MessageBox.Show(curntindex.ToString ());
for (int j = 0; j < (nnum + 1); j++)
{
for (int colIndex = 0; colIndex < (tnum + 1); colIndex++)
{
if (!DBGrid.Columns[colIndex + curntindex].Visible)
{
continue;
}
if (!DBGrid.Rows[j + rowindex].Cells[colIndex + curntindex].ReadOnly)
{
DBGrid.Rows[j + rowindex].Cells[colIndex + curntindex].Value = data[j, colIndex];
}
}
}
Clipboard.Clear();
}
catch
{
Clipboard.Clear();
//MessageBox.Show("粘贴区域大小不一致");
return;
}
}
laolaixuebiancheng 2011-03-23
  • 打赏
  • 举报
回复
如果没有有效的回复我该把分给谁?
laolaixuebiancheng 2011-03-23
  • 打赏
  • 举报
回复
重写控件也需要搞清楚原理啊,没有高手来吗
Just4life 2011-03-22
  • 打赏
  • 举报
回复
如果你要这个样子的话,只能自己重写控件了
laolaixuebiancheng 2011-03-22
  • 打赏
  • 举报
回复
而且关键是从剪贴板粘贴的用户体验要好得多,读取EXCEL数据你要给人家设置很多对话框让人家选择很麻烦,不如直接CTRL+c CTRL+V来得爽快,还有,不是 EXCEL数据呢,是access数据或者其他软件或者网页上的呢?所以还是直接CTRL+c CTRL+V好
laolaixuebiancheng 2011-03-22
  • 打赏
  • 举报
回复
直接从execl读数到datagridview里有一个麻烦就是原始数据需要整理,如果从剪贴板加入内容我可以加前缀的,excel的数据往往是针对一个类型的,我在加入的时候前缀就是这个类型就完整了,况且EXCEL表格的内容很多不是我真正需要的我会直接删除然后复制我需要的内容添加到数据库,所以我还是倾向于从剪贴板粘贴,最好是复制几列数据一起粘贴,那么如何进行有效的验证呢?过程和步骤如何?
风之影子 2011-03-22
  • 打赏
  • 举报
回复
方法一:直接从execl读数到datagridview里,比你手工复制来的更具完整性。
方法二:判断剪切版中的内容,在粘贴时进行有效性验证。

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧