如何根据条件更改DataGridView列值
本文关键字:DataGridView 列值 条件 何根 | 更新日期: 2023-09-27 18:28:30
是否可以根据条件更改列值或单元格值
假设我在一个DataGridView
中有3列(即),以找到两个数字中最大的
DataGridView
的输入来自SQL Server。
第一列Datagridview是A,第二列是B,第三列是查找A是否大于B。如果条件满足,则应当在第三列中显示文本CCD_ 3或者CCD_。
我在这里回答了一个类似的问题更改DataGridView 的单元格值
您可以使用DataGridView.CellFormatting
事件。在您的情况下,当需要格式化第三个单元格时,您需要为每一行检索其他单元格的值。
下面的示例代码假设:
- 值是
DataGridView
中的int
:您需要进行适当的转换 - 无
Null
、DbNull
值:如果需要,您需要检查空值
void dgv_CellFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 2) {
if (Convert.ToInt32(this.dgv.Rows[e.RowIndex].Cells[0].Value) > Convert.ToInt32(this.dgv.Rows[e.RowIndex].Cells[1].Value)) {
e.Value = "TRUE";
} else {
e.Value = "FALSE";
}
e.FormattingApplied = true;
}
}
使用服务器端方法根据您的条件更改单元格的值:
<asp:TemplateField HeaderText="Application No">
<ItemTemplate>
<asp:Label ID="lbl" Text='<%# chkValue(Eval("A"),Eval("B")) %>' runat="server" />
</ItemTemplate>
</asp:TemplateField>
chkValue函数将接受两个参数,并检查哪个值更大,并相应地返回true/false。
试试这个
<asp:GridView runat="server" ID="gv">
<Columns>
<asp:TemplateField HeaderText="a">
<ItemTemplate>
<%# Eval("a") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="b">
<ItemTemplate>
<%# Eval("b") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="display">
<ItemTemplate>
<%# Convert.ToInt16(Eval("a"))>Convert.ToInt16(Eval("b"))?"True":"False" %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Protected Sub dgrd_WWWH_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles dgrd_WWWH.RowDataBound
If e.Row.RowType And DataControlRowType.DataRow Then
Dim ColA As Label = CType(e.Row.FindControl("colA"), Label)
Dim ColB As Label = CType(e.Row.FindControl("colB"), Label)
If Val(ColA) > Val(ColB) then
dgrd_WWWH.Rows(e.Row.RowIndex).Cells(2).Text = "True"
Else
dgrd_WWWH.Rows(e.Row.RowIndex).Cells(2).Text = "False"
End If
End If
End Sub