第一次加载表单时,Datagrid的显示方式不同

时间:2013-11-20 13:00:34

标签: c# entity-framework datagridview repository-pattern

我有一个datagridview,显示“库”中书籍的信息。但是由于某种原因,第一次加载表单时,它会显示我在第一列而不是最后一列中的按钮列,以及按钮列中的所有按钮都处于活动状态。当我通过单击另一个按钮加载表单后调用相同的方法时,它按照预期显示datagridview,其中按钮列是最右列,书籍副本为0,按钮列中的按钮被禁用。之后它继续完美地工作,从来没有在第一次加载。

以下是该方法的代码:

    /// <summary>
    /// Sets datagrid to show all books that have available copies.  Adds buttons to the last columns.  Resizes datagrid. 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void showAvailCopies_Click(object sender, EventArgs e)
    {
        this.dataGrid.Columns.Clear();
        this.dt.set_availableBookView();   // dt is a datable and set_availBookView is an extension method I wrote to set up the columns of the table. 
        foreach (Book book in this.bookService.getAll())
        {
            this.dt.Rows.Add(
                book.Title,
                book.Author.Name.ToString(),
                book.ISBN,
                this.copyService.getAvailableCopies(book.Title).Count(),
                loanService.numOfLoansByBook(book.Title)
                );

        }
        this.addButtonColumn("Loan", "Loan Book"); // Goes through the usual add button column code with parameters to set the button text and button column header.  
        this.dataGrid.DataSource = dt;

        foreach (DataGridViewRow row in this.dataGrid.Rows)
        {
            if (row.Cells["Copies Available"].Value.ToString() == "0")
            {
                DataGridViewDisableButtonCell buttonCell =
                    (DataGridViewDisableButtonCell)row.Cells["Loan Book"];
                buttonCell.Enabled = false;
                buttonCell.Style.BackColor = Color.Red;
            }
        } 

        this.autoSizeGrid();
    } 

从数据库加载数据(通过bookService.getAll()完成)加载数据的速度是否比加载按钮列的速度慢?因此,当我在可用副本列中检查0时,它永远不会返回true?

我意识到我没有展示相当数量的代码。我希望也许这将是一件简单的事情,我会丢失,而不是在这里转储大量的代码。如果您需要查看我的任何其他方法的任何代码,请告诉我。

1 个答案:

答案 0 :(得分:1)

在我看来,你想要在渲染之前更新网格(第一次)。在后续帖子上它可以工作,因为网格已经被渲染,虽然在上一个回发后。我的猜测是第一次,你的foreach循环实际上并没有循环通过任何东西?

这个答案描述了如何连接RowAdded事件,你可以用它来执行你的按钮逻辑(即使我的诊断错误,这也值得一看!)

https://stackoverflow.com/a/3846937/1514883