public partial class _Default : System.Web.UI.Page |
{ |
protected void Page_Load(object sender, EventArgs e) |
{ |
if (!Page.IsPostBack) |
{ |
Calendar.SelectedDate = DateTime.Now; |
} |
} |
private void GetDays() |
{ |
} |
private void CreateSelectedCollection(Telerik.Web.UI.Calendar.Collections.DateTimeCollection coll, bool rebindgrid) |
{ |
Dictionary<DateTime, Entry> dict = new Dictionary<DateTime, Entry>(); |
StringBuilder b = new StringBuilder(); |
for (int i = 0; i < coll.Count; i++) |
{ |
dict.Add(coll[i].Date, new Entry(coll[i].Date, true, -1)); |
b.Append("'"); |
b.Append(coll[i].Date.ToString("yyyy-MM-dd")); |
b.Append("'"); |
if (i != coll.Count - 1) |
b.Append(","); |
} |
checkdates(b.ToString(), dict, rebindgrid); |
} |
private void checkdates(string p, Dictionary<DateTime, Entry> dict, bool rebindgrid) |
{ |
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["TimesheetConnectionString"].ConnectionString)) |
{ |
conn.Open(); |
SqlCommand comm = new SqlCommand("SELECT * FROM tblEntries WHERE Date IN( " + p + " )", conn); |
SqlDataReader reader = comm.ExecuteReader(); |
while (reader.Read()) |
{ |
if (dict.ContainsKey((DateTime)reader["Date"])) |
{ |
dict[(DateTime)reader["Date"]].From = (DateTime)reader["From_"]; |
dict[(DateTime)reader["Date"]].To = (DateTime)reader["To_"]; |
dict[(DateTime)reader["Date"]].IsNewRecord = false; |
dict[(DateTime)reader["Date"]].ID = int.Parse(reader["ID"].ToString()); |
} |
} |
} |
grid.DataSource = dict.Values; |
if (rebindgrid) |
grid.Rebind(); |
} |
protected void update(object source, Telerik.Web.UI.GridCommandEventArgs e) |
{ |
Hashtable t = new Hashtable(); |
GridEditableItem editedItem = e.Item as GridEditableItem; |
e.Item.OwnerTableView.ExtractValuesFromItem(t, editedItem); |
} |
protected void RadGrid1_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e) |
{ |
if (e.CommandName == "UpdateAll") |
{ |
foreach (GridEditableItem editedItem in grid.EditItems) |
{ |
Hashtable newValues = new Hashtable(); |
e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem); |
updateorinsert((string)newValues["To"], (string)newValues["From"], (bool)newValues["IsNewRecord"], (string)newValues["Date"], (string)newValues["ID"]); |
editedItem.Edit = false; |
} |
} |
grid.Rebind(); |
} |
private void updateorinsert(string to, string from, bool isnew, string date, string id) |
{ |
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["TimesheetConnectionString"].ConnectionString)) |
{ |
conn.Open(); |
if ((isnew)) |
{ |
SqlCommand comm = new SqlCommand("INSERT INTO tblEntries (Date, To_, From_) VALUES (@Date, @To, @From)", conn); |
comm.Parameters.AddWithValue("@Date", DateTime.Parse(date).ToString("yyyy-MM-dd")); |
comm.Parameters.AddWithValue("@To", DateTime.Parse(to).ToString("yyyy-MM-dd HH:mm")); |
comm.Parameters.AddWithValue("@From", DateTime.Parse(from).ToString("yyyy-MM-dd HH:mm")); |
int result = comm.ExecuteNonQuery(); |
} |
else |
{ |
SqlCommand comm = new SqlCommand("UPDATE tblEntries SET Date = @Date, To_ = @To, From_ = @From WHERE ID = @Id", conn); |
comm.Parameters.AddWithValue("@Date", DateTime.Parse(date).ToString("yyyy-MM-dd")); |
comm.Parameters.AddWithValue("@To", DateTime.Parse(to).ToString("yyyy-MM-dd HH:mm")); |
comm.Parameters.AddWithValue("@From", DateTime.Parse(from).ToString("yyyy-MM-dd HH:mm")); |
comm.Parameters.AddWithValue("@Id", int.Parse(id)); |
int result = comm.ExecuteNonQuery(); |
} |
conn.Close(); |
} |
} |
TimeSpan a; |
protected void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e) |
{ |
if (e.Item is GridDataItem) |
{ |
GridDataItem dataItem = e.Item as GridDataItem; |
TimeSpan tmp; |
if (TimeSpan.TryParse(dataItem["Span"].Text, out tmp)) |
a += (tmp); |
} |
if (e.Item is GridFooterItem) |
{ |
GridFooterItem footerItem = e.Item as GridFooterItem; |
footerItem["Span"].Text = "total: " + a.Hours + " h" + a.Minutes + " m"; |
} |
} |
protected void RadGrid1_PreRender(object sender, System.EventArgs e) |
{ |
// Force all rows to be in edit mode (rebind is called) |
foreach (GridItem item in grid.MasterTableView.Items) |
{ |
if (item is GridEditableItem) |
{ |
GridEditableItem editableItem = item as GridDataItem; |
editableItem.Edit = true; |
} |
} |
grid.Rebind(); |
} |
/// <summary> |
/// Needdatasource event handler |
/// </summary> |
/// <param name="source"></param> |
/// <param name="e"></param> |
protected void need(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) |
{ |
CreateSelectedCollection(Calendar.SelectedDates, false); |
} |
/// <summary> |
/// Dateselected event handler |
/// </summary> |
/// <param name="sender"></param> |
/// <param name="e"></param> |
protected void fire(object sender, SelectedDatesEventArgs e) |
{ |
CreateSelectedCollection(e.SelectedDates, true); |
} |
//protected void save() |
//{ |
//} |
} |
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AJAXEnabledWebApplication1._Default" %> |
<%@ Register TagPrefix="telerik" Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" %> |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml" > |
<head runat="server"> |
<title>Untitled Page</title> |
</head> |
<body> |
<form id="form1" runat="server"> |
<asp:ScriptManager ID="ScriptManager1" runat="server" /> |
<div> |
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true"> |
<ContentTemplate> |
<telerik:RadCalendar MultiViewColumns="6" AutoPostBack="true" runat="server" ID="Calendar" UseColumnHeadersAsSelectors="false" UseRowHeadersAsSelectors="true" OnSelectionChanged="fire" ShowRowHeaders="true" EnableMultiSelect="true" /> |
</ContentTemplate> |
</asp:UpdatePanel> |
<asp:UpdatePanel runat="server" ChildrenAsTriggers="true"> |
<ContentTemplate> |
<telerik:RadGrid Skin="Vista" OnItemDataBound="RadGrid1_ItemDataBound" ShowFooter="true" AllowSorting="true" |
OnItemCommand="RadGrid1_ItemCommand" OnPreRender="RadGrid1_PreRender" OnNeedDataSource="need" |
OnUpdateCommand="update" AutoGenerateColumns="false" runat="server" ID="grid" |
AllowMultiRowEdit="true"> |
<ExportSettings> |
<Excel FileExtension="xls" Format="ExcelML" /> |
<Csv FileExtension="txt" RowDelimiter="NewLine" ColumnDelimiter="semicolon" /> |
<Pdf Title="Timerapport" Producer="TimeSys" PaperSize="a4" PageTitle="TimeRapport" |
AllowPrinting="true" AllowCopy="true" AllowAdd="true" FontType="Embed" /> |
</ExportSettings> |
<MasterTableView EditMode="inplace" CommandItemDisplay="topAndBottom"> |
<Columns> |
<telerik:GridDateTimeColumn DataField="Date" HeaderText="Dato" ReadOnly="false"> |
</telerik:GridDateTimeColumn> |
<telerik:GridDateTimeColumn DataField="From" HeaderText="Fra" PickerType="TimePicker"> |
</telerik:GridDateTimeColumn> |
<telerik:GridDateTimeColumn DataField="To" HeaderText="Til" PickerType="TimePicker"> |
</telerik:GridDateTimeColumn> |
<telerik:GridCheckBoxColumn ReadOnly="false" DataField="IsNewRecord" Visible="false" /> |
<telerik:GridBoundColumn ReadOnly="false" DataField="ID" Visible="false" /> |
<telerik:GridBoundColumn ReadOnly="true" DataField="Span" UniqueName="Span" Visible="true" HeaderText="Antall timer" /> |
<telerik:GridTemplateColumn DataField="TimeSp"> |
<ItemTemplate> |
<asp:Literal Text='<%# Eval("TimeSp") %>' runat="server" /> |
</ItemTemplate> |
<FooterTemplate> |
</FooterTemplate> |
</telerik:GridTemplateColumn> |
</Columns> |
<CommandItemTemplate> |
<asp:Button runat="server" ID="UpdateAll" Text="Update |
All" CommandName="UpdateAll" /> |
</CommandItemTemplate> |
</MasterTableView> |
</telerik:RadGrid> |
</ContentTemplate> |
</asp:UpdatePanel> |
</div> |
</form> |
</body> |
</html> |
Hello, I'm creating a small timesheet application, it has a custom total row which sums up the rows in the grid. The problem is that even though the itemdatabound event is fired, the .Text property is empty so i end up getting the wrong totals.