By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,665 Members | 1,950 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,665 IT Pros & Developers. It's quick & easy.

How to handle null values in DataBinder.Eval()

P: n/a
Hello,

in my aspx page I have the followong code:

<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
....
<%# Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst")) %>
....
</ItemTemplate>
</asp:Repeater>

Whereby "tekst" one of the columns is being loaded in the dataset
In the code behind page data is loaded as as follows:

....
meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
ds = m.GetMeetingByID(meetingID);
dr = ds.Tables[0].Rows[0];
DataView dv = new DataView(ds.Tables[0]);
this.Repeater1.DataSource = dv;
this.Repeater1.DataBind();
....

The problem is that column "tekst" can be null.
In that case, I'm getting an error on
<%# Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst")) %>
because the (string) cast then goes wrong. If "tekst" is not null, it is ok.

Now this is just for "tekst", but also other columns in my table could be
null.
How can I deal with this is a nice way?

Eddy de Boer
Nov 19 '05 #1
Share this Question
Share on Google+
11 Replies


P: n/a
You should test for null using IsDBNull(object) prior to allowing the value
in question to be used in your repeater.
"eddy de boer" <ed********@discussions.microsoft.com> wrote in message
news:0F**********************************@microsof t.com...
Hello,

in my aspx page I have the followong code:

<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
...
<%# Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%>
...
</ItemTemplate>
</asp:Repeater>

Whereby "tekst" one of the columns is being loaded in the dataset
In the code behind page data is loaded as as follows:

...
meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
ds = m.GetMeetingByID(meetingID);
dr = ds.Tables[0].Rows[0];
DataView dv = new DataView(ds.Tables[0]);
this.Repeater1.DataSource = dv;
this.Repeater1.DataBind();
...

The problem is that column "tekst" can be null.
In that case, I'm getting an error on
<%# Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%>
because the (string) cast then goes wrong. If "tekst" is not null, it is
ok.

Now this is just for "tekst", but also other columns in my table could be
null.
How can I deal with this is a nice way?

Eddy de Boer

Nov 19 '05 #2

P: n/a
Thank you for your answer.

But how would I do that?
Because if it is null, is it your intention to replace it with "" in case of
a strng and a 0 in case of a integer?

Then I should put the following code in the code behind like:

....
for each (Column cl in ds.Tables[i].Rows[j].Columns) )
{
if (cl.IsDBnull(cl))
{
if (cl.Type == DataType.Integer)
{
cl.Value = 0;
}
....
}
ds.ApplyUpdates()

something like this?

Or is there another way?
"Scott M." wrote:
You should test for null using IsDBNull(object) prior to allowing the value
in question to be used in your repeater.
"eddy de boer" <ed********@discussions.microsoft.com> wrote in message
news:0F**********************************@microsof t.com...
Hello,

in my aspx page I have the followong code:

<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
...
<%# Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%>
...
</ItemTemplate>
</asp:Repeater>

Whereby "tekst" one of the columns is being loaded in the dataset
In the code behind page data is loaded as as follows:

...
meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
ds = m.GetMeetingByID(meetingID);
dr = ds.Tables[0].Rows[0];
DataView dv = new DataView(ds.Tables[0]);
this.Repeater1.DataSource = dv;
this.Repeater1.DataBind();
...

The problem is that column "tekst" can be null.
In that case, I'm getting an error on
<%# Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%>
because the (string) cast then goes wrong. If "tekst" is not null, it is
ok.

Now this is just for "tekst", but also other columns in my table could be
null.
How can I deal with this is a nice way?

Eddy de Boer


Nov 19 '05 #3

P: n/a
Write a function in the code-behind and call the function (instead of
Server.HtmlDecode) with the column parameters, the function can check if it
is a null (int or string) and return what you want, else the function calls
Server.HtmlDecode.
Your idea of going through the table and change the nulls will work as well.

"eddy de boer" <ed********@discussions.microsoft.com> wrote in message
news:62**********************************@microsof t.com...
Thank you for your answer.

But how would I do that?
Because if it is null, is it your intention to replace it with "" in case
of
a strng and a 0 in case of a integer?

Then I should put the following code in the code behind like:

...
for each (Column cl in ds.Tables[i].Rows[j].Columns) )
{
if (cl.IsDBnull(cl))
{
if (cl.Type == DataType.Integer)
{
cl.Value = 0;
}
....
}
ds.ApplyUpdates()

something like this?

Or is there another way?
"Scott M." wrote:
You should test for null using IsDBNull(object) prior to allowing the
value
in question to be used in your repeater.
"eddy de boer" <ed********@discussions.microsoft.com> wrote in message
news:0F**********************************@microsof t.com...
> Hello,
>
> in my aspx page I have the followong code:
>
> <asp:Repeater id="Repeater1" runat="server">
> <ItemTemplate>
> ...
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
> %>
> ...
> </ItemTemplate>
> </asp:Repeater>
>
> Whereby "tekst" one of the columns is being loaded in the dataset
> In the code behind page data is loaded as as follows:
>
> ...
> meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
> ds = m.GetMeetingByID(meetingID);
> dr = ds.Tables[0].Rows[0];
> DataView dv = new DataView(ds.Tables[0]);
> this.Repeater1.DataSource = dv;
> this.Repeater1.DataBind();
> ...
>
> The problem is that column "tekst" can be null.
> In that case, I'm getting an error on
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
> %>
> because the (string) cast then goes wrong. If "tekst" is not null, it
> is
> ok.
>
> Now this is just for "tekst", but also other columns in my table could
> be
> null.
> How can I deal with this is a nice way?
>
> Eddy de Boer
>
>


Nov 19 '05 #4

P: n/a
Sorry, to elaborate, instead of having
<%#
Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%>

then you have
<%#
MyFunction(Container.DataItem,"tekst")
%>
"Chris Botha" <ch***********@AThotmail.com> wrote in message
news:Oo**************@TK2MSFTNGP12.phx.gbl...
Write a function in the code-behind and call the function (instead of
Server.HtmlDecode) with the column parameters, the function can check if
it is a null (int or string) and return what you want, else the function
calls Server.HtmlDecode.
Your idea of going through the table and change the nulls will work as
well.

"eddy de boer" <ed********@discussions.microsoft.com> wrote in message
news:62**********************************@microsof t.com...
Thank you for your answer.

But how would I do that?
Because if it is null, is it your intention to replace it with "" in case
of
a strng and a 0 in case of a integer?

Then I should put the following code in the code behind like:

...
for each (Column cl in ds.Tables[i].Rows[j].Columns) )
{
if (cl.IsDBnull(cl))
{
if (cl.Type == DataType.Integer)
{
cl.Value = 0;
}
....
}
ds.ApplyUpdates()

something like this?

Or is there another way?
"Scott M." wrote:
You should test for null using IsDBNull(object) prior to allowing the
value
in question to be used in your repeater.
"eddy de boer" <ed********@discussions.microsoft.com> wrote in message
news:0F**********************************@microsof t.com...
> Hello,
>
> in my aspx page I have the followong code:
>
> <asp:Repeater id="Repeater1" runat="server">
> <ItemTemplate>
> ...
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
> %>
> ...
> </ItemTemplate>
> </asp:Repeater>
>
> Whereby "tekst" one of the columns is being loaded in the dataset
> In the code behind page data is loaded as as follows:
>
> ...
> meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
> ds = m.GetMeetingByID(meetingID);
> dr = ds.Tables[0].Rows[0];
> DataView dv = new DataView(ds.Tables[0]);
> this.Repeater1.DataSource = dv;
> this.Repeater1.DataBind();
> ...
>
> The problem is that column "tekst" can be null.
> In that case, I'm getting an error on
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
> %>
> because the (string) cast then goes wrong. If "tekst" is not null, it
> is
> ok.
>
> Now this is just for "tekst", but also other columns in my table could
> be
> null.
> How can I deal with this is a nice way?
>
> Eddy de Boer
>
>


Nov 19 '05 #5

P: n/a
Thank you for your answer!

"Chris Botha" wrote:
Sorry, to elaborate, instead of having
<%#
Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%>

then you have
<%#
MyFunction(Container.DataItem,"tekst")
%>
"Chris Botha" <ch***********@AThotmail.com> wrote in message
news:Oo**************@TK2MSFTNGP12.phx.gbl...
Write a function in the code-behind and call the function (instead of
Server.HtmlDecode) with the column parameters, the function can check if
it is a null (int or string) and return what you want, else the function
calls Server.HtmlDecode.
Your idea of going through the table and change the nulls will work as
well.

"eddy de boer" <ed********@discussions.microsoft.com> wrote in message
news:62**********************************@microsof t.com...
Thank you for your answer.

But how would I do that?
Because if it is null, is it your intention to replace it with "" in case
of
a strng and a 0 in case of a integer?

Then I should put the following code in the code behind like:

...
for each (Column cl in ds.Tables[i].Rows[j].Columns) )
{
if (cl.IsDBnull(cl))
{
if (cl.Type == DataType.Integer)
{
cl.Value = 0;
}
....
}
ds.ApplyUpdates()

something like this?

Or is there another way?
"Scott M." wrote:

You should test for null using IsDBNull(object) prior to allowing the
value
in question to be used in your repeater.
"eddy de boer" <ed********@discussions.microsoft.com> wrote in message
news:0F**********************************@microsof t.com...
> Hello,
>
> in my aspx page I have the followong code:
>
> <asp:Repeater id="Repeater1" runat="server">
> <ItemTemplate>
> ...
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
> %>
> ...
> </ItemTemplate>
> </asp:Repeater>
>
> Whereby "tekst" one of the columns is being loaded in the dataset
> In the code behind page data is loaded as as follows:
>
> ...
> meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
> ds = m.GetMeetingByID(meetingID);
> dr = ds.Tables[0].Rows[0];
> DataView dv = new DataView(ds.Tables[0]);
> this.Repeater1.DataSource = dv;
> this.Repeater1.DataBind();
> ...
>
> The problem is that column "tekst" can be null.
> In that case, I'm getting an error on
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
> %>
> because the (string) cast then goes wrong. If "tekst" is not null, it
> is
> ok.
>
> Now this is just for "tekst", but also other columns in my table could
> be
> null.
> How can I deal with this is a nice way?
>
> Eddy de Boer
>
>



Nov 19 '05 #6

P: n/a
If you are using a typed dataset you can set a property of the column
called NullValue and have it come back with a default value (which is a
empty string)

=?Utf-8?B?ZWRkeSBkZSBib2Vy?= <ed********@discussions.microsoft.com>
wrote in news:0F**********************************@microsof t.com:
Hello,

in my aspx page I have the followong code:

<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
...
<%#
Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%> ...
</ItemTemplate>
</asp:Repeater>

Whereby "tekst" one of the columns is being loaded in the dataset
In the code behind page data is loaded as as follows:

...
meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
ds = m.GetMeetingByID(meetingID);
dr = ds.Tables[0].Rows[0];
DataView dv = new DataView(ds.Tables[0]);
this.Repeater1.DataSource = dv;
this.Repeater1.DataBind();
...

The problem is that column "tekst" can be null.
In that case, I'm getting an error on
<%#
Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%> because the (string) cast then goes wrong. If "tekst" is not null,
it is ok.

Now this is just for "tekst", but also other columns in my table could
be null.
How can I deal with this is a nice way?

Eddy de Boer


Nov 19 '05 #7

P: n/a
Thank you for your response.
I don't know how to create a strong typed dataset, I will show you how I get
my data.
I'm using the folling DataHandler to get my data:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace meetmate.DataLayer
{
/// <summary>
/// Summary description for DataHandler.
/// </summary>
public class DataHandler
{
private SqlConnection conn;
private string connectionString;

public DataHandler()
{
connectionString = ConfigurationSettings.AppSettings["connectionString"];
conn = new SqlConnection(connectionString);
}

public DataSet GetDataSet(SqlCommand cmd)
{
cmd.Connection = conn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

return ds;
}

public void ExecuteCommand(SqlCommand cmd)
{
cmd.Connection = conn;
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}
}
}
In another module I call the Get like this:

public DataSet GetMeetingByID(int meetingID)
{
string qry = "select
titel,datum,tijd_van,tijd_tot,adres,plaats,tekst,v erslag " +
"from Meetings " +
"where ID = @ID";
SqlCommand cmd = new SqlCommand(qry);
cmd.Parameters.Add(new SqlParameter("@ID",meetingID));
DataHandler dh = new DataHandler();
DataSet ds = dh.GetDataSet(cmd);

return ds;
}

Then, in my BusinessLayer, I call the GetMeetingByID.
Do you know or have a reference how I could use typed DataSet in this?

Thank you,
Eddy
"James Doughty" wrote:
If you are using a typed dataset you can set a property of the column
called NullValue and have it come back with a default value (which is a
empty string)

=?Utf-8?B?ZWRkeSBkZSBib2Vy?= <ed********@discussions.microsoft.com>
wrote in news:0F**********************************@microsof t.com:
Hello,

in my aspx page I have the followong code:

<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
...
<%#
Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%> ...
</ItemTemplate>
</asp:Repeater>

Whereby "tekst" one of the columns is being loaded in the dataset
In the code behind page data is loaded as as follows:

...
meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
ds = m.GetMeetingByID(meetingID);
dr = ds.Tables[0].Rows[0];
DataView dv = new DataView(ds.Tables[0]);
this.Repeater1.DataSource = dv;
this.Repeater1.DataBind();
...

The problem is that column "tekst" can be null.
In that case, I'm getting an error on
<%#
Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"))
%> because the (string) cast then goes wrong. If "tekst" is not null,
it is ok.

Now this is just for "tekst", but also other columns in my table could
be null.
How can I deal with this is a nice way?

Eddy de Boer


Nov 19 '05 #8

P: n/a
<%#
Server.HtmlDecode(IsDBNull(DataBinder.Eval(Contain er.DataItem,"tekst"))
? "" : (string) DataBinder.Eval(Container.DataItem,"tekst")) %>

Nov 19 '05 #9

P: n/a
Take a look at http://msdn.microsoft.com/library/default.asp?
url=/library/en-us/dnhcvb03/html/vb03f9.asp

If you have any questions or don't understand something about let me
know.

=?Utf-8?B?ZWRkeSBkZSBib2Vy?= <ed********@discussions.microsoft.com>
wrote in news:AC**********************************@microsof t.com:
Thank you for your response.
I don't know how to create a strong typed dataset, I will show you how
I get my data.
I'm using the folling DataHandler to get my data:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace meetmate.DataLayer
{
/// <summary>
/// Summary description for DataHandler.
/// </summary>
public class DataHandler
{
private SqlConnection conn;
private string connectionString;

public DataHandler()
{
connectionString =
ConfigurationSettings.AppSettings["connectionString"];
conn = new SqlConnection(connectionString);

}

public DataSet GetDataSet(SqlCommand cmd)
{
cmd.Connection = conn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

return ds;
}

public void ExecuteCommand(SqlCommand cmd)
{
cmd.Connection = conn;
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}
}
}
In another module I call the Get like this:

public DataSet GetMeetingByID(int meetingID)
{
string qry = "select
titel,datum,tijd_van,tijd_tot,adres,plaats,tekst,v erslag " +
"from Meetings " +
"where ID = @ID";
SqlCommand cmd = new SqlCommand(qry);
cmd.Parameters.Add(new SqlParameter("@ID",meetingID));
DataHandler dh = new DataHandler();
DataSet ds = dh.GetDataSet(cmd);

return ds;
}

Then, in my BusinessLayer, I call the GetMeetingByID.
Do you know or have a reference how I could use typed DataSet in this?

Thank you,
Eddy
"James Doughty" wrote:
If you are using a typed dataset you can set a property of the column
called NullValue and have it come back with a default value (which is
a empty string)

=?Utf-8?B?ZWRkeSBkZSBib2Vy?= <ed********@discussions.microsoft.com>
wrote in news:0F**********************************@microsof t.com:
> Hello,
>
> in my aspx page I have the followong code:
>
> <asp:Repeater id="Repeater1" runat="server">
> <ItemTemplate>
> ...
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"
> )) %> ...
> </ItemTemplate>
> </asp:Repeater>
>
> Whereby "tekst" one of the columns is being loaded in the dataset
> In the code behind page data is loaded as as follows:
>
> ...
> meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
> ds = m.GetMeetingByID(meetingID);
> dr = ds.Tables[0].Rows[0];
> DataView dv = new DataView(ds.Tables[0]);
> this.Repeater1.DataSource = dv;
> this.Repeater1.DataBind();
> ...
>
> The problem is that column "tekst" can be null.
> In that case, I'm getting an error on
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"
> )) %> because the (string) cast then goes wrong. If "tekst" is not
> null, it is ok.
>
> Now this is just for "tekst", but also other columns in my table
> could be null.
> How can I deal with this is a nice way?
>
> Eddy de Boer
>
>
>



Nov 19 '05 #10

P: n/a
Thanks for your response!

"sp3d2orbit" wrote:
<%#
Server.HtmlDecode(IsDBNull(DataBinder.Eval(Contain er.DataItem,"tekst"))
? "" : (string) DataBinder.Eval(Container.DataItem,"tekst")) %>

Nov 19 '05 #11

P: n/a
Thank you James

"James Doughty" wrote:
Take a look at http://msdn.microsoft.com/library/default.asp?
url=/library/en-us/dnhcvb03/html/vb03f9.asp

If you have any questions or don't understand something about let me
know.

=?Utf-8?B?ZWRkeSBkZSBib2Vy?= <ed********@discussions.microsoft.com>
wrote in news:AC**********************************@microsof t.com:
Thank you for your response.
I don't know how to create a strong typed dataset, I will show you how
I get my data.
I'm using the folling DataHandler to get my data:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace meetmate.DataLayer
{
/// <summary>
/// Summary description for DataHandler.
/// </summary>
public class DataHandler
{
private SqlConnection conn;
private string connectionString;

public DataHandler()
{
connectionString =
ConfigurationSettings.AppSettings["connectionString"];
conn = new SqlConnection(connectionString);

}

public DataSet GetDataSet(SqlCommand cmd)
{
cmd.Connection = conn;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

return ds;
}

public void ExecuteCommand(SqlCommand cmd)
{
cmd.Connection = conn;
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}
}
}
In another module I call the Get like this:

public DataSet GetMeetingByID(int meetingID)
{
string qry = "select
titel,datum,tijd_van,tijd_tot,adres,plaats,tekst,v erslag " +
"from Meetings " +
"where ID = @ID";
SqlCommand cmd = new SqlCommand(qry);
cmd.Parameters.Add(new SqlParameter("@ID",meetingID));
DataHandler dh = new DataHandler();
DataSet ds = dh.GetDataSet(cmd);

return ds;
}

Then, in my BusinessLayer, I call the GetMeetingByID.
Do you know or have a reference how I could use typed DataSet in this?

Thank you,
Eddy
"James Doughty" wrote:
If you are using a typed dataset you can set a property of the column
called NullValue and have it come back with a default value (which is
a empty string)

=?Utf-8?B?ZWRkeSBkZSBib2Vy?= <ed********@discussions.microsoft.com>
wrote in news:0F**********************************@microsof t.com:

> Hello,
>
> in my aspx page I have the followong code:
>
> <asp:Repeater id="Repeater1" runat="server">
> <ItemTemplate>
> ...
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"
> )) %> ...
> </ItemTemplate>
> </asp:Repeater>
>
> Whereby "tekst" one of the columns is being loaded in the dataset
> In the code behind page data is loaded as as follows:
>
> ...
> meetmate.DataLayer.Meetings m = new meetmate.DataLayer.Meetings();
> ds = m.GetMeetingByID(meetingID);
> dr = ds.Tables[0].Rows[0];
> DataView dv = new DataView(ds.Tables[0]);
> this.Repeater1.DataSource = dv;
> this.Repeater1.DataBind();
> ...
>
> The problem is that column "tekst" can be null.
> In that case, I'm getting an error on
> <%#
> Server.HtmlDecode((string)DataBinder.Eval(Containe r.DataItem,"tekst"
> )) %> because the (string) cast then goes wrong. If "tekst" is not
> null, it is ok.
>
> Now this is just for "tekst", but also other columns in my table
> could be null.
> How can I deal with this is a nice way?
>
> Eddy de Boer
>
>
>


Nov 19 '05 #12

This discussion thread is closed

Replies have been disabled for this discussion.