在c#中移动字表到datagridview
本文关键字:datagridview 移动 | 更新日期: 2023-09-27 18:10:22
我有一个应用程序,其中数据存储在单词表中。我想把表格的内容放到gridview中。有可能这样做吗?下面是代码
的一部分private void FillDocumentInfo(Word._Document reportDoc, string heading, Hashtable documentInfo)
{
object oEndOfDoc = "''endofdoc"; /* 'endofdoc is a predefined bookmark */
object oMissing = System.Reflection.Missing.Value;
Word.Paragraph oPara;
object oRng = reportDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
oPara = reportDoc.Content.Paragraphs.Add(ref oRng);
oPara.Range.InsertParagraphBefore();
oPara.Range.Font.Size = 20;
oPara.Range.Text = heading;
oPara.Range.Font.Bold = 1;
oPara.Range.InsertParagraphAfter();
Word.Range wrdRng = reportDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
Word.Table oTable;
wrdRng = reportDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
oTable = reportDoc.Tables.Add(wrdRng, documentInfo.Count, 2, ref oMissing, ref oMissing);
oTable.AutoFitBehavior(Word.WdAutoFitBehavior.wdAutoFitContent);
oTable.Range.ParagraphFormat.SpaceAfter = 6;
IDictionaryEnumerator _enumerator = documentInfo.GetEnumerator();
int r = 1, c = 1;
while (_enumerator.MoveNext())
{
oTable.Rows[r].Range.Font.Bold = 0;
oTable.Rows[r].Range.Font.Italic = 1;
oTable.Cell(r, c++).Range.Text = _enumerator.Key.ToString();
oTable.Cell(r++, c--).Range.Text = _enumerator.Value.ToString();
List<string> cellValues = new List<string>();
string cellContents = _enumerator.Key.ToString();
string cellcont = _enumerator.Value.ToString();
// add the cell contents to the array, but remove the strange termination character on the end of the data
cellValues.Add(cellContents.Remove(cellContents.Length - 1));
cellValues.Add(cellcont.Remove(cellcont.Length - 1));
AddWordTableRow(cellValues);
}
documentInfo.Clear();
}
public void AddWordTableRow1(string name, string address)
{
dataGridView1.Rows.Add(new string[] { name, address});
}
public void AddWordTableRow(List<string> cellValues)
{
DataGridViewRow dr = new DataGridViewRow();
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
AddWordTableRow1(cellValues[0], cellValues[1]);
}
这里得到跨线程操作异常
很可能需要调用AddWordTableRow1()方法。你可以尝试使用你在评论中发布的动作,或者你可以尝试使用这个有用的扩展方法,我有调用;
public static void InvokeEx<T>(this T @this, Action<T> action) where T : ISynchronizeInvoke
{
if (@this.InvokeRequired)
{
@this.Invoke(action, new object[] { @this });
}
else
{
action(@this);
}
}
在你的例子中,像这样使用;
dataGridView1.InvokeEx(() => dataGridView1.Rows.Add(new string[] { name, address}));
编辑# 1:另外,如果你想使行/列垫出,以显示你放进去的数据,尝试修改数据网格属性;AutoSizeColumnsMode和AutoSizeRowsMode