C# Datagridview单击时大容量插入事件
我有一段代码,可以将我从excel文件复制的任何内容插入到datagridview中,在datagridview中继续插入(批量插入)到数据库中。 我的问题是,当我粘贴到datagridview中时,第一行变成(并超过)我的列名,我不知道为什么: 代码如下:C# Datagridview单击时大容量插入事件,c#,sql,datagridview,bulkinsert,datagridviewcolumn,C#,Sql,Datagridview,Bulkinsert,Datagridviewcolumn,我有一段代码,可以将我从excel文件复制的任何内容插入到datagridview中,在datagridview中继续插入(批量插入)到数据库中。 我的问题是,当我粘贴到datagridview中时,第一行变成(并超过)我的列名,我不知道为什么: 代码如下: private void btnBulkAdd_Click(object sender, EventArgs e) { DataObject o = (DataObject)Clipboard.Get
private void btnBulkAdd_Click(object sender, EventArgs e)
{
DataObject o = (DataObject)Clipboard.GetDataObject();
if (o.GetDataPresent(DataFormats.Text))
{
if (dgvIntake.RowCount > 0)
dgvIntake.Rows.Clear();
if (dgvIntake.ColumnCount > 0)
dgvIntake.Columns.Clear();
bool columnsAdded = false;
string[] pastedRows = System.Text.RegularExpressions.Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd("\r\n".ToCharArray()), "\r\n");
int j = 0;
foreach (string pastedRow in pastedRows)
{
string[] pastedRowCells = pastedRow.Split(new char[] { '\t' });
if (!columnsAdded)
{
for (int i = 0; i < pastedRowCells.Length; i++)
dgvIntake.Columns.Add("col" + i, pastedRowCells[i]);
columnsAdded = true;
continue;
}
dgvIntake.Rows.Add();
int myRowIndex = dgvIntake.Rows.Count + 1;
using (DataGridViewRow myDataGridViewRow = dgvIntake.Rows[j])
{
for (int i = 0; i < pastedRowCells.Length; i++)
myDataGridViewRow.Cells[i].Value = pastedRowCells[i];
}
j++;
}
}
}
private void btnBulkAdd_单击(对象发送者,事件参数e)
{
DataObject o=(DataObject)剪贴板。GetDataObject();
if(o.GetDataPresent(DataFormats.Text))
{
如果(dgvIntake.RowCount>0)
dgvIntake.Rows.Clear();
如果(dgvIntake.ColumnCount>0)
dgvIntake.Columns.Clear();
bool columnsAdded=false;
string[]pastedRows=System.Text.RegularExpressions.Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd(“\r\n.ToCharray()),”\r\n”);
int j=0;
foreach(pastedRow中的字符串pastedRow)
{
字符串[]pastedRowCells=pastedRow.Split(新字符[]{'\t'});
如果(!列已添加)
{
for(int i=0;i
至于我的批量插入按钮:
private void btnBulkInsert_Click(object sender, EventArgs e)
{
string strQuery;
try
{
using (SqlConnection conn = new SqlConnection("Data Source = ROTIMSQL01; Initial Catalog = TDB; Persist Security Info = True; User ID = adiM; Password = Mohan@1234"))
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = conn;
conn.Open();
for(int i=0;i<dgvIntake.Rows.Count; i++)
{
strQuery = @"INSERT INTO [dbo].[TestTable] VALUES " + dgvIntake.Rows[i].Cells["ID"].Value + ","
+ dgvIntake.Rows[i].Cells["Other1"].Value + ",'" + dgvIntake.Rows[i].Cells["Other2"].Value + "'," + dgvIntake.Rows[i].Cells["Other3"].Value + ","
+ dgvIntake.Rows[i].Cells["Other4"].Value + "," + dgvIntake.Rows[i].Cells["Other5"].Value + ")";
comm.CommandText = strQuery;
comm.ExecuteNonQuery();
}
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnBulkInsert\u单击(对象发送方,事件参数e)
{
字符串strQuery;
尝试
{
使用(SqlConnection conn=newsqlconnection)(“数据源=ROTIMSQL01;初始目录=TDB;持久安全信息=True;用户ID=adiM;密码=Mohan@1234"))
{
使用(SqlCommand comm=newsqlcommand())
{
通信连接=连接;
conn.Open();
对于Excel上的(int i=0;i,它不存在“columnname”,您在Excel中看到的也是值
excel中唯一的列名类似于A、B、C、D、E……Z、AA、AB、AC
因此,将列名称粘贴到第一行是正常的
因此,有两种解决方案:
可能需要控制第一行中的列名
在Excel中不应复制列名