| protected void grdAvailable_NeedDataSource(object source, GridNeedDataSourceEventArgs e) |
| { |
| grdAvailable.DataSource = AvailableFields; |
| } |
| protected void grdSelected_NeedDataSource(object source, GridNeedDataSourceEventArgs e) |
| { |
| grdSelected.DataSource = SelectedFields; |
| } |
| |
| protected IList<Field> AvailableFields |
| { |
| get |
| { |
| try |
| { |
| object obj = Session["AvailableFields"]; |
| if (obj == null) |
| { |
| obj = GetAvailableFields(); |
| if (obj != null) |
| { |
| Session["AvailableFields"] = obj; |
| } |
| else |
| { |
| obj = new List<Field>(); |
| } |
| } |
| return (IList<Field>)obj; |
| } |
| catch |
| { |
| Session["AvailableFields"] = null; |
| } |
| return new List<Field>(); |
| } |
| set { Session["AvailableFields"] = value; } |
| } |
| |
| protected IList<Field> SelectedFields |
| { |
| get |
| { |
| try |
| { |
| object obj = Session["SelectedFields"]; |
| if (obj == null) |
| { |
| Session["SelectedFields"] = obj = new List<Field>(); |
| } |
| return (IList<Field>)obj; |
| } |
| catch |
| { |
| Session["SelectedFields"] = null; |
| } |
| return new List<Field>(); |
| } |
| set { Session["SelectedFields"] = value; } |
| } |
| |
| protected IList<Field> GetAvailableFields() |
| { |
| IList<Field> results = new List<Field>(); |
| //using (IDbConnection connection = DbProviderFactories.GetFactory("System.Data.SqlClient").CreateConnection()) |
| //{ |
| // connection.ConnectionString = |
| // ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString; |
| // using (IDbCommand command = connection.CreateCommand()) |
| // { |
| // command.CommandText = |
| // "SELECT o.OrderID, o.CustomerID, o.RequiredDate, c.CompanyName FROM orders o INNER JOIN customers c on o.customerID = c.customerID"; |
| // connection.Open(); |
| // try |
| // { |
| // IDataReader reader = command.ExecuteReader(); |
| // while (reader.Read()) |
| // { |
| // string fieldName = (!reader.IsDBNull(reader.GetOrdinal("fieldname"))) |
| // ? (string)reader.GetValue(reader.GetOrdinal("CustomerID")) |
| // : string.Empty; |
| // string description = (!reader.IsDBNull(reader.GetOrdinal("description"))) |
| // ? (string)reader.GetValue(reader.GetOrdinal("RequiredDate")) |
| // : string.Empty; |
| // string width = (!reader.IsDBNull(reader.GetOrdinal("width"))) |
| // ? (string)reader.GetValue(reader.GetOrdinal("CompanyName")) |
| // : string.Empty; |
| results.Add(new Field("jobid", "Ticket", "150")); |
| results.Add(new Field("status", "S", "150")); |
| // } |
| // } |
| // catch |
| // { |
| // results.Clear(); |
| // } |
| // } |
| //} |
| return results; |
| } |
| |
| protected void grdAvailable_RowDrop(object sender, GridDragDropEventArgs e) |
| { |
| if (string.IsNullOrEmpty(e.HtmlElement)) |
| { |
| if (e.DraggedItems[0].OwnerGridID == grdAvailable.ClientID) |
| { |
| // items are drag from available to selected grid |
| if ((e.DestDataItem == null && SelectedFields.Count == 0) || |
| e.DestDataItem != null && e.DestDataItem.OwnerGridID == grdSelected.ClientID) |
| { |
| IList<Field> selectedFields = SelectedFields; |
| IList<Field> availableFields = AvailableFields; |
| foreach (GridDataItem draggedItem in e.DraggedItems) |
| { |
| Field tmpField = GetField(availableFields, (string)draggedItem.GetDataKeyValue("fieldname")); |
| if (tmpField != null) |
| { |
| selectedFields.Add(tmpField); |
| availableFields.Remove(tmpField); |
| } |
| } |
| SelectedFields = selectedFields; |
| AvailableFields = availableFields; |
| grdAvailable.Rebind(); |
| grdSelected.Rebind(); |
| } |
| else if (e.DestDataItem != null && e.DestDataItem.OwnerGridID == grdAvailable.ClientID) |
| { |
| //reorder items in available grid |
| IList<Field> availableFields = AvailableFields; |
| Field field = GetField(availableFields, (string)e.DestDataItem.GetDataKeyValue("fieldname")); |
| int destinationIndex = availableFields.IndexOf(field); |
| List<Field> fieldsToMove = new List<Field>(); |
| foreach (GridDataItem draggedItem in e.DraggedItems) |
| { |
| Field tmpField = GetField(availableFields, (string)draggedItem.GetDataKeyValue("fieldname")); |
| if (tmpField != null) |
| fieldsToMove.Add(tmpField); |
| } |
| foreach (Field fieldToMove in fieldsToMove) |
| { |
| availableFields.Remove(fieldToMove); |
| availableFields.Insert(destinationIndex, fieldToMove); |
| } |
| AvailableFields = availableFields; |
| grdAvailable.Rebind(); |
| e.DestDataItem.Selected = true; |
| } |
| } |
| } |
| } |
| |
| private static Field GetField(IEnumerable<Field> fieldsToSearchIn, string fieldName) |
| { |
| foreach (Field field in fieldsToSearchIn) |
| { |
| if (field.fieldName == fieldName) |
| { |
| return field; |
| } |
| } |
| return null; |
| } |
| |
| protected void grdSelected_RowDrop(object sender, GridDragDropEventArgs e) |
| { |
| if (string.IsNullOrEmpty(e.HtmlElement)) |
| { |
| if (e.DraggedItems[0].OwnerGridID == grdSelected.ClientID) |
| { |
| // items are drag from selected to available grid |
| if ((e.DestDataItem == null && AvailableFields.Count == 0) || |
| e.DestDataItem != null && e.DestDataItem.OwnerGridID == grdAvailable.ClientID) |
| { |
| IList<Field> availableFields = AvailableFields; |
| IList<Field> selectedFields = SelectedFields; |
| foreach (GridDataItem draggedItem in e.DraggedItems) |
| { |
| Field tmpField = GetField(selectedFields, (string)draggedItem.GetDataKeyValue("fieldname")); |
| if (tmpField != null) |
| { |
| availableFields.Add(tmpField); |
| selectedFields.Remove(tmpField); |
| } |
| } |
| AvailableFields = availableFields; |
| SelectedFields = selectedFields; |
| grdSelected.Rebind(); |
| grdAvailable.Rebind(); |
| } |
| else if (e.DestDataItem != null && e.DestDataItem.OwnerGridID == grdSelected.ClientID) |
| { |
| //reorder items in selected grid |
| IList<Field> selectedFields = SelectedFields; |
| Field field = GetField(selectedFields, (string)e.DestDataItem.GetDataKeyValue("fieldname")); |
| int destinationIndex = selectedFields.IndexOf(field); |
| List<Field> fieldsToMove = new List<Field>(); |
| foreach (GridDataItem draggedItem in e.DraggedItems) |
| { |
| Field tmpField = GetField(selectedFields, (string)draggedItem.GetDataKeyValue("fieldname")); |
| if (tmpField != null) |
| fieldsToMove.Add(tmpField); |
| } |
| foreach (Field fieldToMove in fieldsToMove) |
| { |
| selectedFields.Remove(fieldToMove); |
| selectedFields.Insert(destinationIndex, fieldToMove); |
| } |
| AvailableFields = selectedFields; |
| grdSelected.Rebind(); |
| e.DestDataItem.Selected = true; |
| } |
| } |
| } |
| } |
|
| #region Nested type: Field |
| protected class Field |
| { |
| private string _fieldName; |
| private string _description; |
| private string _width; |
| public Field(string fieldName, string description, string width) |
| { |
| _fieldName = fieldName; |
| _description = description; |
| _width = width; |
| } |
| public string fieldName |
| { |
| get { return _fieldName; } |
| } |
| public string description |
| { |
| get { return _description; } |
| } |
| public string width |
| { |
| get { return _width; } |
| } |
| } |
|
| #endregion |
| |