Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / October 2005

Tip: Looking for answers? Try searching our database.

How to handle null values in DataBinder.Eval()

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
eddy de boer - 23 Oct 2005 17:52 GMT
Hello,

in my aspx page I have the followong code:

<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
...
<%# Server.HtmlDecode((string)DataBinder.Eval(Container.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(Container.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
Scott M. - 23 Oct 2005 18:32 GMT
You should test for null using IsDBNull(object) prior to allowing the value
in question to be used in your repeater.

> Hello,
>
[quoted text clipped - 33 lines]
>
> Eddy de Boer
eddy de boer - 23 Oct 2005 22:13 GMT
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?

> You should test for null using IsDBNull(object) prior to allowing the value
> in question to be used in your repeater.
[quoted text clipped - 36 lines]
> >
> > Eddy de Boer
Chris Botha - 24 Oct 2005 00:08 GMT
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.

> Thank you for your answer.
>
[quoted text clipped - 67 lines]
>> >
>> > Eddy de Boer
Chris Botha - 24 Oct 2005 00:13 GMT
Sorry, to elaborate, instead of having
<%#
Server.HtmlDecode((string)DataBinder.Eval(Container.DataItem,"tekst"))
%>

then you have
<%#
MyFunction(Container.DataItem,"tekst")
%>

> Write a function in the code-behind and call the function (instead of
> Server.HtmlDecode) with the column parameters, the function can check if
[quoted text clipped - 74 lines]
>>> >
>>> > Eddy de Boer
eddy de boer - 24 Oct 2005 08:30 GMT
Thank you for your answer!

> Sorry, to elaborate, instead of having
> <%#
[quoted text clipped - 84 lines]
> >>> >
> >>> > Eddy de Boer
James Doughty - 24 Oct 2005 19:14 GMT
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?= <eddydeboer@discussions.microsoft.com>
wrote in news:0F9749C0-80E4-4C2B-8350-FC0BDEC183D7@microsoft.com:

> Hello,
>
[quoted text clipped - 33 lines]
>
> Eddy de Boer
eddy de boer - 25 Oct 2005 12:26 GMT
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,verslag " +
                        "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

> 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
[quoted text clipped - 40 lines]
> >
> > Eddy de Boer
James Doughty - 26 Oct 2005 14:13 GMT
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?= <eddydeboer@discussions.microsoft.com>
wrote in news:ACBD4AC0-0F66-4317-919E-1D184380724C@microsoft.com:

> Thank you for your response.
> I don't know how to create a strong typed dataset, I will show you how
[quoted text clipped - 116 lines]
>> >
>> > Eddy de Boer
eddy de boer - 27 Oct 2005 07:24 GMT
Thank you James

> Take a look at http://msdn.microsoft.com/library/default.asp?
> url=/library/en-us/dnhcvb03/html/vb03f9.asp
[quoted text clipped - 125 lines]
> >> >
> >> > Eddy de Boer
sp3d2orbit - 25 Oct 2005 18:02 GMT
<%#
Server.HtmlDecode(IsDBNull(DataBinder.Eval(Container.DataItem,"tekst"))
? "" : (string) DataBinder.Eval(Container.DataItem,"tekst")) %>
eddy de boer - 27 Oct 2005 07:24 GMT
Thanks for your response!

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

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.