I would suggest converting the column that has null values to a template field. add a label control and bind the label with visibility set to false. add another label that is visible.
example:
<asp:templatefield headertext="Quantity" xmlns:asp="#unknown">
<itemtemplate>
<asp:label id="quantlabel" runat="server" text=""></asp:label>
<asp:label id="Label6" runat="server" text="<%# Bind("TickDItemQuantity") %>" visible="false"></asp:label>
</itemtemplate>
<itemstyle horizontalalign="Center" />
</asp:templatefield>
on gridview rowdatabound you can access the bound labels value
hence:
Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim quantlabel As Label = TryCast(e.Row.FindControl("quantlabel"), Label)
Dim Label6 As Label = TryCast(e.Row.FindControl("Label6"), Label)
If Label6.Text Is Nothing Or Label6.Text = "" Then
quantlabel.text = "0"
Else
quantlabel.Text = Label6.Text
End If
End Sub
this way if the value is NULL from the database then your label value will reflect "0" or whatever you choose to insert into it else it will retain the original value of the bound label.
hope this will help you.