DataTable myTable = new DataTable("components");
DataColumn mydatcolumn;
mydatcolumn = new DataColumn();
mydatcolumn.DataType = System.Type.GetType("System.String");
mydatcolumn.ColumnName = "Component";
myTable.Columns.Add(mydatcolumn);
mydatcolumn = new DataColumn();
mydatcolumn.DataType = System.Type.GetType("System.String");
mydatcolumn.ColumnName = "Service Category";
myTable.Columns.Add(mydatcolumn);
mydatcolumn = new DataColumn();
mydatcolumn.DataType = System.Type.GetType("System.String");
mydatcolumn.ColumnName = "Component Owner";
myTable.Columns.Add(mydatcolumn);
for (int i = 0; i < serviceList.Count; i++)
{
DataRow mydatarow;
//DataRow mydatarow2;
mydatarow = myTable.NewRow();
mydatarow["component"] = ComponentList[i];
//mydatarow2 = myTable.NewRow();
mydatarow["Service Category"] = sc[i];
myTable.Rows.Add(mydatarow);
}
componentRGOdataGridView.DataSource = myTable;
private void addCoButton_Click(object sender, EventArgs e)
{
}
如上所述,我正在创建一个包含三列的DataTable,并在2 List&lt;&gt;中显示这些项目。 (使用此dataTable在datagridview上显示)。列表仅填充2列的行,第三列用于用户输入。在该按钮单击事件上,我只想在用户提供输入的文件中写入那些行,并忽略其余的行。我怎样才能做到这一点。 非常感谢
答案 0 :(得分:0)
使用componentRGOdataGridView.Rows获取componentRGOdataGridView中的所有row。
然后使用DataGridViewRow类的Cells属性来获取单元格的值
在此之后,您可以使用自己喜欢的csv编写器制作csv文件。
您可以尝试使用此代码将单元格的值打印到输出窗口。
foreach (DataGridViewRow item in componentRGOdataGridView.Rows)
{
Debug.Write(item.Cells[0].Value.ToString());
Debug.Write(item.Cells[1].Value.ToString());
Debug.WriteLine(item.Cells[2].Value.ToString());
}
答案 1 :(得分:0)
DataGridView控件提供DataGridView.GetClipboardContent()
方法,该方法将所选单元格格式化为可放入Windows剪贴板的DataObject
。然后,您可以将剪贴板的内容检索为TextDataFormat.CommaSeparatedValue
。这会将剪贴板的内容作为CSV格式的字符串返回,该字符串可以写入文件。通过使用DataGridView提供的方法SelectAll()
,您可以选择要复制到剪贴板中的整个DataGridView。您甚至可以通过将DataGridView.ClipboardCopyMode
指定为枚举DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText
来复制标题行。
见证以下代码的简单性:
void SaveDataGridViewToCSV(string filename)
{
// Save the current state of the clipboard so we can restore it after we are done
IDataObject objectSave = Clipboard.GetDataObject();
// Choose whether to write header. Use EnableWithoutHeaderText instead to omit header.
dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
// Select all the cells
dataGridView1.SelectAll();
// Copy (set clipboard)
Clipboard.SetDataObject(dataGridView1.GetClipboardContent());
// Paste (get the clipboard and serialize it to a file)
File.WriteAllText(filename,Clipboard.GetText(TextDataFormat.CommaSeparatedValue));
// Restore the current state of the clipboard so the effect is seamless
if(objectSave != null) // If we try to set the Clipboard to an object that is null, it will throw...
{
Clipboard.SetDataObject(objectSave);
}
}
请注意,在复制DataGridView之前,我还采取了保存剪贴板内容的预防措施,这样我就可以在完成后恢复它。
我相信这种方法更优越,因为您使用的是已经为您提供的框架,而不是通过循环遍历行和单元来重新发明轮子,这很容易出错。
希望这能解决你的问题...