Winforms - Datagridview动态更改链接按钮文本

时间:2014-07-11 17:16:30

标签: vb.net winforms datagridview

我正在使用Winforms datagridview(n层架构)从数据集填充。我希望有一个linkbutton作为最后一列,它应根据两列的值更改其文本。虽然我设法获得了链接按钮,但我无法获得改变的价值。我需要更改值,以便在单击linkbutton时,它应该打开不同的窗口。我的代码如下

Private Sub ShowProductRequisitionsInListView(ByVal data As DataSet, ByVal dgv As DataGridView)
    dgvRequisitionDetails.Columns.Clear()
    dgvRequisitionDetails.DataSource = Nothing
    dgvRequisitionDetails.DataSource = data.Tables(0)
    dgvRequisitionDetails.Columns(0).Width = 80
    dgvRequisitionDetails.Columns(0).HeaderText = "Product Code"
    dgvRequisitionDetails.Columns(1).Width = 180
    dgvRequisitionDetails.Columns(1).HeaderText = "Product Name"
    dgvRequisitionDetails.Columns(2).Width = 150
    dgvRequisitionDetails.Columns(2).HeaderText = "Sales UOM"
    dgvRequisitionDetails.Columns(3).Width = 60
    dgvRequisitionDetails.Columns(3).HeaderText = "Qty. Reqd."
    dgvRequisitionDetails.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    dgvRequisitionDetails.Columns(3).DefaultCellStyle.Format = "N3"
    dgvRequisitionDetails.Columns(4).Width = 105
    dgvRequisitionDetails.Columns(4).HeaderText = "Qty. In Stock"
    dgvRequisitionDetails.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    dgvRequisitionDetails.Columns(4).DefaultCellStyle.Format = "N3"
    Dim lnk As DataGridViewLinkColumn = New DataGridViewLinkColumn
    dgvRequisitionDetails.Columns.Add(lnk)
    lnk.HeaderText = "Action"
    lnk.Text = "Click Here"
    lnk.Name = "lnkAction"
    lnk.UseColumnTextForLinkValue = True
End Sub

如果QtyReqd和QtyInStock之间的差值为负值,则链接按钮应显示为“不可用”,如果有足够的库存则应显示为“可用”。根据这两个值,点击链接后将打开不同的窗口

我试图检查DataBindingComplete事件中的条件,但它不起作用。我在这里做错了什么?

CL

2 个答案:

答案 0 :(得分:0)

我认为最简单的方法是在数据表中添加computed column,并将其用作链接列的数据绑定项。像这样:

Dim expr As String = "IFF((([QtyInStock] - [QtyReqd]) >= 0), 'Available', 'Not Available')"
data.Tables(0).Columns.Add("Action", GetType(String), expr)

答案 1 :(得分:0)

在datagrid设计器中添加一个处理程序:OnRowDataBound =" someEvent_RowDataBound"

在后面的代码中你将有一个函数:

    protected void someEvent_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
    {
        If(e.Row.RowType == DataControlRowType.DataRow){
           ((linkbutton)e.Row.Cells[someindex].controls(0)).Text = "somevalue";
        }
    }