Click here to Skip to main content
16,015,991 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I wondering if anyone can help to solve my problem...
On my Hotel program I am trying to do data grid where user can see book and check in information. I made data grid which contains room numbers and have columns which header is date time from today. Tried to do something like that : if room number 777 is occupied from 8/01/2011 to 8/05/2011 five cell was red bellow that date time columns. and if same room is book from 8/07/2011 to 8/08/2011 that cells was yellow.
This is my trigger which checks if room is occupied or booked. When StatusInNumb value is 2 its means dat room is occupied and 1 means room is booked

HTML
<usercontrol.resources>
    <Style x:Key="RoomNumberValidationCellStyle"
                   TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
            <datatrigger binding="{Binding Path=StatusInNumb}" value="2">
                <setter property="Background" value="#FFFFA7A7" />
            </datatrigger>
            <datatrigger binding="{Binding Path=StatusInNumb}" value="1">
                <setter property="Background" value="#FFD8E538" />
            </datatrigger>
        </Style.Triggers>
    </Style>
</usercontrol.resources>




This method creates datagrid columns

C#
public void CreateDataGrid(int range)
   {
       dataGrid1.Columns.Clear();
       HProDataContext db = new HProDataContext();
       var _RoomNumber = (from d in db.SelectRooms select d.roomnumber).ToList();
       var _RoomType = (from d in db.SelectRooms select d.roomtype).ToList();
       var _RoomStatus = (from d in db.SelectRooms select d.status).ToList();
       var _te = (from d in db.rooms select d.forroomsinfo).ToList();
       for (int i = 0; i < _RoomNumber.Count; i++)
       {
           _RoomsInfoCollection.Add(new RoomsInfoData { RoomNumber = _RoomNumber[i], RoomType = _RoomType[i], RoomStatus = _RoomStatus[i], IsRoomMatched = "true", StatusInNumb = Convert.ToInt32(_te[i]) });
       }
       dataGrid1.Columns.Clear();

       dataGrid1.ItemsSource = RoomsInfoCollection;

       dataGrid1.Columns.Add(new DataGridTextColumn
       {
           Header = "Room Type",
           Binding = new Binding("RoomType"),
           IsReadOnly = true
       });

       dataGrid1.Columns.Add(new DataGridTextColumn
            {
                Header = "Room Number",
                Binding = new Binding("RoomNumber"),
                IsReadOnly = true
            });
       dataGrid1.Columns.Add(new DataGridTextColumn
       {
           Header = "Status",
           Binding = new Binding("RoomStatus"),
           Foreground = Brushes.Red,
           IsReadOnly = true
       });

       for (int i = 0; i < range; i++)
       {
           int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
           int Month = DateTime.Now.Month;
           int day = DateTime.Now.Day + i;
           if (day >= daysInMonth)
           {
               day = 1 + i;
               Month = Month + 1;
           }
           dataGrid1.Columns.Add(new DataGridTextColumn { Header = "" + Month + "/" + day + "/" + DateTime.Now.Year.ToString() + "", IsReadOnly = true });
       }
   }

And This method save booked date time array in List
C#
private void BookedDate()
    {
        HProDataContext db = new HProDataContext();

        var _checkInYear = (from d in db.bookings select d.checkinyear).ToList();
        var _checkInMonth = (from d in db.bookings select d.checkinmonth).ToList();
        var _checkInDay = (from d in db.bookings select d.checkinday).ToList();

        var _checkOutYear = (from d in db.bookings select d.checkoutyear).ToList();
        var _checkOutMonth = (from d in db.bookings select d.checkoutmonth).ToList();
        var _checkOutDay = (from d in db.bookings select d.checkoutday).ToList();

        for (int i = 0; i < _checkInDay.Count; i++)
        {
            DateTime checkIn = new DateTime(_checkInYear[i], _checkInMonth[i], _checkInDay[i]);
            DateTime checkOut = new DateTime(_checkOutYear[i], _checkOutMonth[i], _checkOutDay[i]); 
            TimeSpan span = checkOut - checkIn;
            int k = Convert.ToInt32(span.TotalDays);

            for (int day = 0; day <= k; day++)
            {
                rangeBook.Add(checkIn.AddDays(day));
            }

        }
    }


is how i use trigger. The problem of this trigger is that when i call cannot transfer room number
C#
private void button2_Click(object sender, RoutedEventArgs e)
    {
        foreach (var col in this.dataGrid1.Columns)
        {
            for (int i = 0; i < rangeBook.Count; i++)
            {
                var headerText = (string)col.Header;
                if (headerText == rangeBook[i].ToShortDateString())
                {
                    col.CellStyle = this.FindResource("RoomNumberValidationCellStyle") as Style;
                }
            }
        }


So what is problem can seen in screen shot. The room 777 is booked from 8/1/2011 to 8/5/2011 and room 3434 is occupied from 8/1/2011 to 8/2/2011. Please i anyone can help me dont be lazy will be thankful all my life. it is very very very important for me

http://imageshack.us/photo/my-images/155/capturetx.png/[^]
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900