This is a migrated thread and some comments may be shown as answers.

Error displaying InsertItem

2 Answers 121 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Weilun
Top achievements
Rank 1
Weilun asked on 03 Feb 2012, 09:57 PM

I had this Error
Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerServerErrorException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
when i tried to add new record.

Update work fine with RadInputManager to validate the textbox/NumuricTextbox.
I think it might be my js conditionalPostback and validateRadUpload for disable ajax to update Image from RadUpload

Here my aspx file

<%@ Page Title="" Language="C#" MasterPageFile="~/Admin.Master" AutoEventWireup="true" CodeBehind="ManageRecipes.aspx.cs" Inherits="GroceryStore.AdminPanel.ManageRecipes" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="body" runat="server">
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
 
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
 
            <script type="text/javascript">
                function rowDblClick(sender, eventArgs) {
                    sender.get_masterTableView().editItem(eventArgs.get_itemIndexHierarchical());
                }
 
                function conditionalPostback(sender, eventArgs) {
                    var theRegexp = new RegExp("\.UpdateButton$|\.PerformInsertButton$", "ig");
                    if (eventArgs.get_eventTarget().match(theRegexp)) {
                        var upload = $find(window['UploadId']);
 
                        //AJAX is disabled only if file is selected for upload
                        try{
                            if (upload.getFileInputs()[0].value != "") {
                                eventArgs.set_enableAjax(false);
                            }
                        }catch(Error){
                        }
                         
                    }
                }
 
                function validateRadUpload(source, e) {
                    e.IsValid = false;
 
                    var upload = $find(source.parentNode.getElementsByTagName('div')[0].id);
                    var inputs = upload.getFileInputs();
                    for (var i = 0; i < inputs.length; i++) {
                        //check for empty string or invalid extension
                        if (inputs[i].value != "" && upload.isExtensionValid(inputs[i].value)) {
                            e.IsValid = true;
                            break;
                        }
                    }
                }
            </script>
 
        </telerik:RadCodeBlock>
 
 
    <telerik:RadAjaxManager runat="server" ID="RadAjaxManager1" DefaultLoadingPanelID="RadAjaxLoadingPanel1">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="RadGrid1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGrid1" />
                        <telerik:AjaxUpdatedControl ControlID="RadWindowManager1" />
                        <telerik:AjaxUpdatedControl ControlID="RadInputManager1" />
                        <telerik:AjaxUpdatedControl ControlID="RadInputManager2" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
        </telerik:RadAjaxManager>
 
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default">
</telerik:RadAjaxLoadingPanel>
 
<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" ClientEvents-OnRequestStart="conditionalPostback">
<telerik:RadGrid ID="RadGrid1" runat="server" CellSpacing="0" GridLines="None" OnNeedDataSource="RadGrid1_NeedDataSource"
OnItemDataBound="RadGrid1_ItemDataBound" OnItemCreated="RadGrid1_ItemCreated"
OnDeleteCommand="RadGrid1_DeleteCommand" OnUpdateCommand="RadGrid1_UpdateCommand"
OnDetailTableDataBind="RadGrid1_DetailTableDataBind" OnInsertCommand="RadGrid1_InsertCommand"
        AllowSorting="True">
<MasterTableView AutoGenerateColumns="False" DataKeyNames="RecipeId" CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage"
        AllowPaging="True">
    <DetailTables>
        <telerik:GridTableView runat="server"
            AutoGenerateColumns="False" DataKeyNames="RecipeIngredientId" CommandItemDisplay="Top"
            Name="Ingredient">
            <CommandItemSettings ExportToPdfText="Export to PDF" />
            <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
                <HeaderStyle Width="20px" />
            </RowIndicatorColumn>
            <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column">
                <HeaderStyle Width="20px" />
            </ExpandCollapseColumn>
            <Columns>
            <telerik:GridEditCommandColumn ButtonType="ImageButton" />
                <telerik:GridBoundColumn DataField="RecipeIngredientId"
                    FilterControlAltText="Filter RecipeIngredientId column"
                    HeaderText="RecipeIngredientId" UniqueName="RecipeIngredientId" ReadOnly="True">
                </telerik:GridBoundColumn>
                <telerik:GridDropDownColumn DataField="Name"
                    FilterControlAltText="Filter IngredientName column" HeaderText="Ingredient"
                    UniqueName="IngredientName" DataSourceID="LinqDataSource1"
                    ListTextField="Name" ListValueField="Name">
                </telerik:GridDropDownColumn>
                <telerik:GridBoundColumn DataField="Amount"
                    FilterControlAltText="Filter column1 column" HeaderText="Amount"
                    UniqueName="Amount">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="Unit"
                    FilterControlAltText="Filter column2 column" HeaderText="Unit"
                    UniqueName="Unit">
                </telerik:GridBoundColumn>
        <telerik:GridButtonColumn ConfirmText="Delete this Ingredient?" ConfirmDialogType="RadWindow"
        ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" />
            </Columns>
            <EditFormSettings>
                <EditColumn ButtonType="ImageButton">
                </EditColumn>
            </EditFormSettings>
        </telerik:GridTableView>
    </DetailTables>
<CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>
 
<RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
<HeaderStyle Width="20px"></HeaderStyle>
</RowIndicatorColumn>
 
<ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column"
        Visible="True">
<HeaderStyle Width="20px"></HeaderStyle>
</ExpandCollapseColumn>
 
    <Columns>
    <telerik:GridEditCommandColumn ButtonType="ImageButton" />
        <telerik:GridBinaryImageColumn DataField="MainImage"
                        FilterControlAltText="Filter Image column" HeaderText="Image"
                        ImageHeight="50px" ImageWidth="50px" ResizeMode="Crop" UniqueName="Image" DefaultImageUrl="~\resources\images\noImageAvailable.jpg">
        </telerik:GridBinaryImageColumn>
        <telerik:GridBoundColumn DataField="RecipeId" DataType="System.Int32"
            FilterControlAltText="Filter RecipeId column" HeaderText="RecipeId"
            ReadOnly="True" SortExpression="RecipeId" UniqueName="RecipeId">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Name"
            FilterControlAltText="Filter Name column" HeaderText="Name"
            SortExpression="Name" UniqueName="Name">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Description"
            FilterControlAltText="Filter Description column" HeaderText="Description"
            SortExpression="Description" UniqueName="Description">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Serving" DataType="System.Int32"
            FilterControlAltText="Filter Serving column" HeaderText="Serving"
            SortExpression="Serving" UniqueName="Serving">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Instruction"
            FilterControlAltText="Filter Instruction column" HeaderText="Instruction"
            SortExpression="Instruction" UniqueName="Instruction">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Cuisine"
            FilterControlAltText="Filter Cuisine column" HeaderText="Cuisine"
            SortExpression="Cuisine" UniqueName="Cuisine">
        </telerik:GridBoundColumn>
        <telerik:GridButtonColumn ConfirmText="Delete this recipes?" ConfirmDialogType="RadWindow"
        ConfirmTitle="Delete" ButtonType="ImageButton" CommandName="Delete" />
    </Columns>
 
<EditFormSettings>
                    <EditColumn ButtonType="ImageButton" />
</EditFormSettings>
</MasterTableView>
 
<FilterMenu EnableImageSprites="False"></FilterMenu>
 
<HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default"></HeaderContextMenu>
</telerik:RadGrid>
        </telerik:RadAjaxPanel>
 
<telerik:RadInputManager runat="server" ID="RadInputManager1" Enabled="true">
            <telerik:TextBoxSetting BehaviorID="TextBoxSetting1">
            </telerik:TextBoxSetting>
            <telerik:TextBoxSetting BehaviorID="TextBoxSetting2">
            </telerik:TextBoxSetting>
            <telerik:NumericTextBoxSetting BehaviorID="NumericTextBoxSetting1" Type="Number"
                AllowRounding="true" DecimalDigits="0">
            </telerik:NumericTextBoxSetting>
            <telerik:TextBoxSetting BehaviorID="TextBoxSetting3">
            </telerik:TextBoxSetting>
            <telerik:TextBoxSetting BehaviorID="TextBoxSetting4">
            </telerik:TextBoxSetting>
</telerik:RadInputManager>
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" />
 
        <telerik:RadInputManager runat="server" ID="RadInputManager2" Enabled="true">
            <telerik:NumericTextBoxSetting BehaviorID="NumericTextBoxSetting11" Type="Number"
                AllowRounding="true" DecimalDigits="0">
            </telerik:NumericTextBoxSetting>
            <telerik:TextBoxSetting BehaviorID="TextBoxSetting11">
            </telerik:TextBoxSetting>
        </telerik:RadInputManager>
        <telerik:RadWindowManager ID="RadWindowManager2" runat="server" />
 
 
 
 
 
    <asp:LinqDataSource ID="LinqDataSource1" runat="server"
        ContextTypeName="GroceryStore.GroceryStoreDataContext" EntityTypeName=""
        TableName="Ingredientdatas" Select="new (Name)">
    </asp:LinqDataSource>
</asp:Content>

2 Answers, 1 is accepted

Sort by
0
Weilun
Top achievements
Rank 1
answered on 03 Feb 2012, 09:59 PM
Here is code behind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Collections;
using GroceryStore.Entities;
 
namespace GroceryStore.AdminPanel
{
    public partial class ManageRecipes : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
 
        }
        protected void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            RadGrid1.DataSource = Recipedb.getRecipeWithImage();
        }
        protected void RadGrid1_DetailTableDataBind(object source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
        {
            GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem;
            switch (e.DetailTableView.Name)
            {
                case "Ingredient":
                    {
                        Int32 RecipeId = Int32.Parse(dataItem.GetDataKeyValue("RecipeId").ToString());
                        e.DetailTableView.DataSource = Recipedb.getRecipeIngredient(RecipeId);
                        break;
                    }
            }
        }
        protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridEditableItem && e.Item.IsInEditMode)
            {
                var editableItem = ((GridEditableItem)e.Item);
                if (editableItem.KeyValues.Contains("Ingredient"))
                {
                    GridDropDownColumnEditor editor = ((GridEditableItem)e.Item).EditManager.GetColumnEditor("IngredientName") as GridDropDownColumnEditor;
                }
                else if (editableItem.KeyValues.Contains("Recipe"))
                {
                    //GridBinaryImageColumnEditor editor = ((GridEditableItem)e.Item).EditManager.GetColumnEditor("Image") as GridBinaryImageColumnEditor;
                    //RadAjaxPanel1.ResponseScripts.Add(string.Format("window['UploadId'] = '{0}';", editor.RadUploadControl.ClientID));
                }
 
            }
        }
        protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridEditableItem && (e.Item.IsInEditMode))
            {
                GridEditableItem editableItem = (GridEditableItem)e.Item;
                preSetupInputManager(editableItem);
            }
        }
        private void preSetupInputManager(GridEditableItem editableItem)
        {
            string s = editableItem.GetType().ToString();
            if (s.Equals("Telerik.Web.UI.GridEditFormInsertItem"))
            {
                if (editableItem.OwnerTableView.DataKeyNames[0].Contains("Ingredient"))
                {
                    SetupInputManager2(editableItem);
                }
                else if (editableItem.OwnerTableView.DataKeyNames[0].Contains("Recipe"))
                {
                    SetupInputManager(editableItem);
                }
            }
            else if (s.Equals("Telerik.Web.UI.GridEditFormItem"))
            {
                if (editableItem.KeyValues.Contains("Ingredient"))
                {
                    SetupInputManager2(editableItem);
                }
                else if (editableItem.KeyValues.Contains("Recipe"))
                {
                    SetupInputManager(editableItem);
                }
            }
        }
        private void SetupInputManager(GridEditableItem editableItem)
        {
            GridBinaryImageColumnEditor editor = editableItem.EditManager.GetColumnEditor("Image") as GridBinaryImageColumnEditor;
            TableCell cell = (TableCell)editor.RadUploadControl.Parent;
            CustomValidator validator = new CustomValidator();
            validator.ErrorMessage = "Please select file to be uploaded";
            validator.ClientValidationFunction = "validateRadUpload";
            validator.Display = ValidatorDisplay.Dynamic;
            cell.Controls.Add(validator);
 
 
 
            var textBox =
                ((GridTextBoxColumnEditor)editableItem.EditManager.GetColumnEditor("Name")).TextBoxControl;
 
            textBox.ID = "TextBox1";
            InputSetting inputSetting = RadInputManager1.GetSettingByBehaviorID("TextBoxSetting1");
            inputSetting.TargetControls.Add(new TargetInput(textBox.UniqueID, true));
            inputSetting.InitializeOnClient = true;
            inputSetting.Validation.IsRequired = true;
 
            textBox =
                ((GridTextBoxColumnEditor)editableItem.EditManager.GetColumnEditor("Description")).TextBoxControl;
 
            textBox.ID = "TextBox2";
            inputSetting = RadInputManager1.GetSettingByBehaviorID("TextBoxSetting2");
            inputSetting.InitializeOnClient = true;
            inputSetting.TargetControls.Add(new TargetInput(textBox.UniqueID, true));
            inputSetting.Validation.IsRequired = true;
 
            textBox =
                ((GridTextBoxColumnEditor)editableItem.EditManager.GetColumnEditor("Serving")).TextBoxControl;
 
            textBox.ID = "TextBox3";
            inputSetting = RadInputManager1.GetSettingByBehaviorID("NumericTextBoxSetting1");
            inputSetting.InitializeOnClient = true;
            inputSetting.TargetControls.Add(new TargetInput(textBox.UniqueID, true));
            inputSetting.Validation.IsRequired = true;
            textBox =
                ((GridTextBoxColumnEditor)editableItem.EditManager.GetColumnEditor("Instruction")).TextBoxControl;
 
            textBox.ID = "TextBox4";
            inputSetting = RadInputManager1.GetSettingByBehaviorID("TextBoxSetting3");
            inputSetting.InitializeOnClient = true;
            inputSetting.TargetControls.Add(new TargetInput(textBox.UniqueID, true));
            inputSetting.Validation.IsRequired = true;
 
            textBox =
                ((GridTextBoxColumnEditor)editableItem.EditManager.GetColumnEditor("Cuisine")).TextBoxControl;
 
            textBox.ID = "TextBox5";
            inputSetting = RadInputManager1.GetSettingByBehaviorID("TextBoxSetting4");
            inputSetting.InitializeOnClient = true;
            inputSetting.TargetControls.Add(new TargetInput(textBox.UniqueID, true));
            inputSetting.Validation.IsRequired = true;
 
        }
        private void SetupInputManager2(GridEditableItem editableItem)
        {
            //GridDropDownColumnEditor editor = (editableItem).EditManager.GetColumnEditor("IngredientName") as GridDropDownColumnEditor;
            //editor.DataSource = Recipedb.loadDropDown(4);
 
             
            var textBox =
                ((GridTextBoxColumnEditor)editableItem.EditManager.GetColumnEditor("Amount")).TextBoxControl;
 
            textBox.ID = "TextBox11";
            InputSetting inputSetting = RadInputManager2.GetSettingByBehaviorID("NumericTextBoxSetting11");
            inputSetting.TargetControls.Add(new TargetInput(textBox.UniqueID, true));
            inputSetting.InitializeOnClient = true;
            inputSetting.Validation.IsRequired = true;
 
 
            textBox =
                ((GridTextBoxColumnEditor)editableItem.EditManager.GetColumnEditor("Unit")).TextBoxControl;
 
            textBox.ID = "TextBox22";
            inputSetting = RadInputManager2.GetSettingByBehaviorID("TextBoxSetting11");
            inputSetting.TargetControls.Add(new TargetInput(textBox.UniqueID, true));
            inputSetting.InitializeOnClient = true;
            inputSetting.Validation.IsRequired = true;
 
        }
        protected void RadGrid1_DeleteCommand(object source, GridCommandEventArgs e)
        {
            var deleteItem = ((GridDataItem)e.Item);
            if (deleteItem.KeyValues.Contains("Ingredient"))
            {
                DeleteCommand2(source, e);
            }
            else if (deleteItem.KeyValues.Contains("Recipe"))
            {
                DeleteCommand1(source, e);
            }
             
        }
        protected void DeleteCommand1(object source, GridCommandEventArgs e)
        {
            var RecipeId = (int)((GridDataItem)e.Item).GetDataKeyValue("RecipeId");
 
            GroceryStoreDataContext DbContext = new GroceryStoreDataContext();
            //retrive entity form the Db
            var recipe = DbContext.Recipedatas.Where(n => n.RecipeId == RecipeId).FirstOrDefault();
            if (recipe != null)
            {
                //add the category for deletion
                DbContext.Recipedatas.DeleteOnSubmit(recipe);
                try
                {
                    //submit chanages to Db
                    DbContext.SubmitChanges();
                }
                catch (System.Exception)
                {
                }
            }
        }
        protected void DeleteCommand2(object source, GridCommandEventArgs e)
        {
            var RecipeIngredientId = (int)((GridDataItem)e.Item).GetDataKeyValue("RecipeIngredientId");
            var RecipeId = (int)((GridDataItem)e.Item.OwnerTableView.ParentItem).GetDataKeyValue("RecipeId");
            string s = RecipeIngredientId.ToString();
            GroceryStoreDataContext DbContext = new GroceryStoreDataContext();
            //retrive entity form the Db
            var Ingredient = DbContext.RecipeIngredientdatas.Where(n => n.RecipeIngredientId == RecipeIngredientId && n.RecipeId == RecipeId).FirstOrDefault();
            if (Ingredient != null)
            {
                //add the category for deletion
                DbContext.RecipeIngredientdatas.DeleteOnSubmit(Ingredient);
                try
                {
                    //submit chanages to Db
                    DbContext.SubmitChanges();
                }
                catch (System.Exception)
                {
                }
            }
        }
        protected void RadGrid1_InsertCommand(object source, GridCommandEventArgs e)
        {
            var insertItem = ((GridEditableItem)e.Item);
            if (insertItem.OwnerTableView.DataKeyNames[0].Contains("Ingredient"))
            {
                //InsertCommand2(source, e);
            }
            else if (insertItem.OwnerTableView.DataKeyNames[0].Contains("Recipe"))
            {
                InsertCommand1(source, e);
            }
        }
        protected void InsertCommand1(object source, GridCommandEventArgs e)
        {
            var editableItem = ((GridEditableItem)e.Item);
            GroceryStoreDataContext DbContext = new GroceryStoreDataContext();
            //create new entity
            var recipe = new Recipedata();
            //populate its properties
            Hashtable values = new Hashtable();
 
            GridBinaryImageColumnEditor editor = editableItem.EditManager.GetColumnEditor("Image") as GridBinaryImageColumnEditor;
            Byte[] byteArray = editor.UploadedFileContent;
            System.Data.Linq.Binary file = new System.Data.Linq.Binary(byteArray);
 
            editableItem.ExtractValues(values);
            recipe.Name = (string)values["Name"];
            if (values["Description"] != null)
            {
                recipe.Description = values["Description"].ToString();
            }
            if (values["Serving"] != null)
            {
                recipe.Serving = Int32.Parse(values["Serving"].ToString());
            }
            recipe.MainImage = file;
            recipe.Instruction = (string)values["Instruction"];
            recipe.Cuisine = (string)values["Cuisine"];
 
 
            DbContext.Recipedatas.InsertOnSubmit(recipe);
            try
            {
                //submit chanages to Db
                DbContext.SubmitChanges();
            }
            catch (System.Exception)
            {
                ShowErrorMessage();
            }
        }
 
        protected void RadGrid1_UpdateCommand(object source, GridCommandEventArgs e)
        {
            var editableItem = ((GridEditableItem)e.Item);
            if (editableItem.KeyValues.Contains("Ingredient"))
            {
                updateCommand2(source, e);
            }
            else if (editableItem.KeyValues.Contains("Recipe"))
            {
                updateCommand1(source, e);
            }
        }
        protected void updateCommand1(object source, GridCommandEventArgs e)
        {
            GroceryStoreDataContext DbContext = new GroceryStoreDataContext();
            var editableItem = ((GridEditableItem)e.Item);
            var recipeId = Int16.Parse(editableItem.GetDataKeyValue("RecipeId").ToString());
 
            GridBinaryImageColumnEditor editor = editableItem.EditManager.GetColumnEditor("Image") as GridBinaryImageColumnEditor;
            RadUpload upload1 = editor.RadUploadControl;
 
            UploadedFileCollection uploadedFile = upload1.UploadedFiles;
            //          Byte[] byteArray = new Byte[uploadedFile[0].ContentLength];
            Byte[] byteArray = editor.UploadedFileContent;
            System.Data.Linq.Binary file;
            if (byteArray.Length == 0)
            {
                file = Recipedb.getBinaryImage(recipeId);
            }
            else
            {
                try
                {
                    uploadedFile[0].InputStream.Read(byteArray, 0, uploadedFile[0].ContentLength);
                    file = new System.Data.Linq.Binary(byteArray);
                }
                catch (Exception)
                {
                    file = null;
                }
            }
 
            Hashtable table = new Hashtable();
            editableItem.ExtractValues(table);
            string name = table["Name"].ToString();
            string description = table["Description"].ToString();
            int serving = Int32.Parse(table["Serving"].ToString());
            string instruction = table["Instruction"].ToString();
            string cuisine = table["Cuisine"].ToString();
 
            try
            {
                //submit chanages to Db
                Recipedb.updateRecipe(recipeId, name, description, serving, instruction, cuisine, file);
            }
            catch (System.Exception)
            {
 
            }
        }
        protected void updateCommand2(object source, GridCommandEventArgs e)
        {
            GroceryStoreDataContext DbContext = new GroceryStoreDataContext();
            var editableItem = ((GridEditableItem)e.Item);
            int RecipeId = (int)((GridDataItem)e.Item.OwnerTableView.ParentItem).GetDataKeyValue("RecipeId");
            int RecipeIngredientId = Int16.Parse(editableItem.GetDataKeyValue("RecipeIngredientId").ToString());
            GridDropDownColumnEditor editor = ((GridEditableItem)e.Item).EditManager.GetColumnEditor("IngredientName") as GridDropDownColumnEditor;
            string dropdownValue = editor.SelectedValue;
            int IngredientId = Recipedb.getIngredientIdByDropdownValue(dropdownValue);
            //retrive entity form the Db
            var Ingredient = DbContext.RecipeIngredientdatas.Where(n => n.RecipeIngredientId == RecipeIngredientId && n.RecipeId == RecipeId).FirstOrDefault();
            if (Ingredient != null)
            {
                //update entity's state
                editableItem.UpdateValues(Ingredient);
                try
                {
                    //submit chanages to Db
                    DbContext.SubmitChanges();
 
                    GroceryStoreDataContext db = new GroceryStoreDataContext();
                    var test = (from r in db.RecipeIngredientdatas
                                     where r.IngredientId == IngredientId
                                     select r.Unit
                                    ).SingleOrDefault();
                    if (test == null)
                    {
                        Recipedb.updateIngredientId(RecipeIngredientId, RecipeId, IngredientId);
                    }
                }
                catch (System.Exception )
                {
 
                }
            }
        }
         
         
        private void ShowErrorMessage()
        {
            RadAjaxManager1.ResponseScripts.Add(string.Format("window.radalert(\"Please enter valid data!\")"));
        }
 
         
    }
}

Recipedb.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
namespace GroceryStore.Entities
{
    public class Recipedb
    {
        internal static IQueryable getRecipeWithImage()
        {
            GroceryStoreDataContext db = new GroceryStoreDataContext();
            var itemRecipe = (from r in db.Recipedatas
                              select new
                              {
                                  RecipeId = r.RecipeId,
                                  Name = r.Name,
                                  Description = r.Description,
                                  Serving = r.Serving,
                                  Instruction = r.Instruction,
                                  Cuisine = r.Cuisine,
                                  MainImage = r.MainImage == null ? null : r.MainImage.ToArray()
                              }
                                      );
            return itemRecipe;
        }
        internal static IQueryable getRecipeIngredient(int RecipeId)
        {
            GroceryStoreDataContext db = new GroceryStoreDataContext();
            var itemIngredient = (from i in db.Ingredientdatas
                                  join r in db.RecipeIngredientdatas on i.IngredientId equals r.IngredientId
                                  where r.RecipeId == RecipeId
                                  select new
                                  {
                                      IngredientId = r.IngredientId,
                                      Name = i.Name,
                                      Amount = r.Amount,
                                      Unit = r.Unit,
                                      RecipeIngredientId = r.RecipeIngredientId
 
 
                                  }
                                      );
            return itemIngredient;
        }
        internal static System.Data.Linq.Binary getBinaryImage(int recipeId)
        {
            GroceryStoreDataContext db = new GroceryStoreDataContext();
            System.Data.Linq.Binary itemImage = (from r in db.Recipedatas
                                                 where r.RecipeId == recipeId
                                                 select r.MainImage
                            ).SingleOrDefault();
            return itemImage;
        }
        internal static void updateRecipe(int id, String name, String description, int serving, String instruction, String cuisine, System.Data.Linq.Binary image)
        {
            GroceryStoreDataContext db = new GroceryStoreDataContext();
            var recipe = (from r in db.Recipedatas
                          where r.RecipeId == id
                          orderby r.RecipeId
                          select r).SingleOrDefault();
            recipe.Name = name;
            recipe.Description = description;
            recipe.Serving = serving;
            recipe.Instruction = instruction;
            recipe.Cuisine = cuisine;
            recipe.MainImage = image;
            db.SubmitChanges();
        }
        internal static void updateIngredientId(int RecipeIngredientId, int RecipeId, int IngredientId)
        {
            GroceryStoreDataContext db = new GroceryStoreDataContext();
            var recipe = (from r in db.RecipeIngredientdatas
                          where r.RecipeIngredientId == RecipeIngredientId && r.RecipeId == RecipeId
                          select r).SingleOrDefault();
            recipe.IngredientId = IngredientId;
            db.SubmitChanges();
        }
        internal static int getIngredientIdByDropdownValue(string dropdownValue)
        {
            GroceryStoreDataContext db = new GroceryStoreDataContext();
            int IngredientID = (from i in db.Ingredientdatas
                                where i.Name == dropdownValue
                                select i.IngredientId
                            ).SingleOrDefault();
            return IngredientID;
        }
        internal static IQueryable loadDropDown(int recipeid)
        {
            GroceryStoreDataContext db = new GroceryStoreDataContext();
            var result = (from ri in db.RecipeIngredientdatas
                          join ing in db.Ingredientdatas on ri.IngredientId equals ing.IngredientId into g
                          from ing in g.DefaultIfEmpty()
                          where ing == null && ri.RecipeId == recipeid
                          select new { ri, ing })
                            .Concat(
                            from ing in db.Ingredientdatas
                            join sc in db.RecipeIngredientdatas on ing.IngredientId equals sc.IngredientId into g
                            from ri in g.DefaultIfEmpty()
                            where ri == null && ri.RecipeId == recipeid
                            select new { ri, ing });
            return result;
        }
    }
}



0
Weilun
Top achievements
Rank 1
answered on 04 Feb 2012, 05:55 AM
Problem solved
it is the onItemDataBound causing the problem
Tags
Grid
Asked by
Weilun
Top achievements
Rank 1
Answers by
Weilun
Top achievements
Rank 1
Share this question
or