簡體   English   中英

如何在 Excel 中的 ListObject 綁定中觸發更新?

[英]How to trigger update in ListObject binding in Excel?

我將ListObject綁定到DataSet ,如如何:將 ListObject 控件添加到工作表中所述 我想在輸入每一行時計算某些列值。

示例:

  1. 使用為 A1:D2 定義的表,以及 A2 中的光標
  2. 在 A2 中鍵入一個值
  3. 點擊標簽
  4. 期望的行為:行在數據集中更新,我可以檢測到變化並更新其他列
    實際行為:直到游標進入另一行時才會更新行

如何使我的表更新DataSet在當前單元格失去焦點?

您可以使用SheetTableUpdate事件來捕獲列表對象中的更改。

public partial class ThisAddIn
{
    public static Excel.Application e_application;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        e_application = this.Application;
        e_application.SheetTableUpdate += new Excel.AppEvents_SheetTableUpdateEventHandler(e_Application_SheetTableUpdate_Event);
    }

    private void e_Application_SheetTableUpdate_Event(object sender, Excel.TableObject target)
    {
        //--sender object refers to active sheet and must be cast as Worksheet before use
        //Update your dataset here
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        e_application.SheetTableUpdate -= new Excel.AppEvents_SheetTableUpdateEventHandler(e_Application_SheetTableUpdate_Event);
        e_application = null;
    }

    protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
    {
        return new Ribbon();
    }
}

您可以使用以下代碼來引用ActiveCell

(Excel.Range)Application.ActiveCell;

我認為這是更好地利用ListObject.Change事件,而不是WorkSheet.Change事件,因為參數告訴你哪些范圍內的ListObject的變化里面,這樣就避免了從紙張的其余所有其他變化的事件:

private void ListObject_Change_event(targetRange As Range, changedRanges As ListRanges)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM