Hi,
I have problems when i m trying to get the source of the propertygrid.
I get empty collection when i do SponseredLinksGrid.Source although i have some changed rows on the propertygrid.

Attached my code:




<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="BrandToolbar.SearchAdmin.SponseredLinks.Default" %>


<%@ Import Namespace="System.Collections.Generic" %>


<%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>


<!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 id="Head1" runat="server">


<title>Sponsored Links</title>


</head>


<body>


<form id="form1" runat="server">


<ext:ScriptManager ID="ScriptManager1" runat="server" />





<ext:ViewPort ID="ViewPort1" runat="server" >


<Body>


<ext:BorderLayout ID="BorderLayout1" runat="server">


<Center MarginsSummary="0 5 0 5">


<ext:Panel ID="Panel" runat="server" Height="300" Header="false">


<Body>


<ext:FitLayout ID="FitLayout" runat="server">


<ext:PropertyGrid ID="SponseredLinksGrid" runat="server" Width="150" AutoHeight="true" >





<TopBar>


<ext:Toolbar ID="SelectCTID" runat="server" Height="30">


<Items>


<ext:ToolbarTextItem ID="lblForCbox" runat="server" Text="Type: "></ext:ToolbarTextItem>


<ext:ComboBox ID="TypeCBox" runat="server" AllowBlank="false">


<Items>


<ext:ListItem Text="CT-ID" Value="1" />


<ext:ListItem Text="Toolbar name" Value="2" />


</Items>


<SelectedItem Value="1" />


</ext:ComboBox>


<ext:ToolbarSeparator ID="Seperator" runat="server"></ext:ToolbarSeparator>


<ext:ToolbarTextItem ID="toolbartxt" runat="server" Text="Toolbar: "></ext:ToolbarTextItem>


<ext:TextField ID="SearchText" runat="server" EmptyText="Enter a toolbar to search..." EnableKeyEvents="true" Width="200"></ext:TextField>


<ext:ToolbarButton ID="SearchButton" runat="server" Text="Go!" Icon="Magnifier" >


<AjaxEvents>


<Click OnEvent="SearchMethod" />


</AjaxEvents>


</ext:ToolbarButton>


</Items>


</ext:Toolbar>


</TopBar>





<View>


<ext:GridView ID="GridView1" ForceFit="true" ScrollOffset="2" runat="server" />


</View>


<Listeners>


<Render Handler="this.getStore().sortInfo = undefined;this.getColumnModel().setColumnHeader(0, 'Sponsored Links Type');this.getColumnModel().setColumnHeader(1, 'Ammount');" />


</Listeners> 


<Buttons>


<ext:Button ID="btnSave" runat="server" Text="Save" Icon="Disk">


<ToolTips>


<ext:ToolTip runat="server" ID="saveBtnTooltip" Title="Save the sponsered links values" ></ext:ToolTip>


</ToolTips>


<AjaxEvents>


<Click OnEvent="SaveClick" Before="#{SponseredLinksGrid}.stopEditing(false);" > 


<EventMask ShowMask="true" MinDelay="500" Msg="Saving..." />


</Click>


</AjaxEvents>


</ext:Button>


<ext:Button ID="btnRestore" runat="server" Text="Restore" Icon="ArrowRefresh">


<ToolTips>


<ext:ToolTip runat="server" ID="restoreBtnTooltip" Title="Restore the default values." ></ext:ToolTip>


</ToolTips>


<AjaxEvents>


<Click OnEvent="RestoreClick">


</Click>





</AjaxEvents>


</ext:Button> 


</Buttons>


</ext:PropertyGrid>


</ext:FitLayout>


</body>


</ext:Panel>


</Center>


</ext:BorderLayout>


</body>


</ext:ViewPort>





</form>


</body>


</html>
My code-behind is:



using System;


using System.Collections.Generic;


using System.Linq;


using System.Web;


using System.Web.UI;


using System.Web.UI.WebControls;


using BrandToolbar.SearchAdmin.BLL.Views;


using Coolite.Ext.Web;


using BrandToolbar.SearchAdmin.BLL.DataAccess;


namespace BrandToolbar.SearchAdmin.SponseredLinks


{


public partial class Default : System.Web.UI.Page


{


const int NUMBER_OF_SPONSERED_LINKS_TYPES = 7;


static string _currentCtid; 





protected void Page_Load(object sender, EventArgs e)


{


if (!IsPostBack)


{








}


}


/// <summary>


/// Handle the Clicking of the search button.


/// </summary>


/// <param name="sender"></param>


/// <param name="e"></param>


protected void SearchMethod(object sender, AjaxEventArgs e)


{


string toolbar = SearchText.Text.Trim();


Dictionary<int,int?> sponseredlinksTypesValues = new Dictionary<int,int?>();


if (String.IsNullOrEmpty(toolbar))


{//Toolbar's name or ctid isn't entered.


Ext.Msg.Alert("Message", "Please enter CTID or toolbar's name!").Show();


return;


}


else


{


if (TypeCBox.SelectedItem.Value.Equals("1"))


{//The search is by CTID


if (!SponseredLinksDataSource.IsCTIDExist(toolbar))


{//The CTID isn't exist.


Ext.Msg.Alert("Message", String.Format("The CTID {0} is not exist!", toolbar)).Show();


return;


}


else


{


//Update the current CTID member to the new CTID


_currentCtid = toolbar;


//Get the sponsered links by the given CTID.


sponseredlinksTypesValues = SponseredLinksDataSource.GetSponseredLinks(toolbar);


}


}


else


{//The search is by toolbar's name.


//Get the CTID by the toolbar's name.


string ctid = SponseredLinksDataSource.GetCTIDByToolbarName(toolbar);


//Update the current CTID member to the new CTID


_currentCtid = ctid;


if (String.IsNullOrEmpty(ctid))


{//There is no ctid that corresponding to the given toolbar's name.


Ext.Msg.Alert("Message", String.Format("Toolbar with the name {0} is not exist!", toolbar)).Show


();


return;


}


//Get the sponsered links by the given CTID.


sponseredlinksTypesValues = SponseredLinksDataSource.GetSponseredLinks(ctid);


}


NumberField numberField = new NumberField


{


AllowBlank = true,


ReadOnly = false,


AllowNegative = false,


AllowDecimals = false,


MinValue = 0,


MinText = "This field must be positive",


MaxValue = 20,


MaxText = "More than 20 sponsered links is not allowed",


SelectOnFocus = true


};





if (sponseredlinksTypesValues.ContainsKey(1))


{


PropertyGridParameter topSponseredeparameter = new PropertyGridParameter("Top Sponsored Links", sponseredlinksTypesValues[1].ToString());


topSponseredeparameter.Mode = ParameterMode.Raw;


topSponseredeparameter.Editor.Add(numberField);


SponseredLinksGrid.Source.Add(topSponseredeparameter);


}


if (sponseredlinksTypesValues.ContainsKey(2))


{


PropertyGridParameter bottomSponseredeparameter = new PropertyGridParameter("Bottom Sponsored Links", sponseredlinksTypesValues[1].ToString());


bottomSponseredeparameter.Mode = ParameterMode.Raw;


bottomSponseredeparameter.Editor.Add(numberField);


SponseredLinksGrid.Source.Add(bottomSponseredeparameter);


}


if (sponseredlinksTypesValues.ContainsKey(3))


{


PropertyGridParameter sideSponseredeparameter = new PropertyGridParameter("Side Sponsored Links", sponseredlinksTypesValues[1].ToString());


sideSponseredeparameter.Mode = ParameterMode.Raw;


sideSponseredeparameter.Editor.Add(numberField);


SponseredLinksGrid.Source.Add(sideSponseredeparameter);


}


if (sponseredlinksTypesValues.ContainsKey(4))


{


PropertyGridParameter onlySponseredeparameter = new PropertyGridParameter("Only Sponsored Links", sponseredlinksTypesValues[1].ToString());


onlySponseredeparameter.Mode = ParameterMode.Raw;


onlySponseredeparameter.Editor.Add(numberField);


SponseredLinksGrid.Source.Add(onlySponseredeparameter);


}


if (sponseredlinksTypesValues.ContainsKey(5))


{


PropertyGridParameter communityTopSponseredeparameter = new PropertyGridParameter("Community Top Sponsored Links", sponseredlinksTypesValues[1].ToString());


communityTopSponseredeparameter.Mode = ParameterMode.Raw;


communityTopSponseredeparameter.Editor.Add(numberField);


SponseredLinksGrid.Source.Add(communityTopSponseredeparameter);


}


if (sponseredlinksTypesValues.ContainsKey(6))


{


PropertyGridParameter communitySideSponseredeparameter = new PropertyGridParameter("Community Side Sponsored Links", sponseredlinksTypesValues[1].ToString());


communitySideSponseredeparameter.Mode = ParameterMode.Raw;


communitySideSponseredeparameter.Editor.Add(numberField);


SponseredLinksGrid.Source.Add(communitySideSponseredeparameter);


}


if (sponseredlinksTypesValues.ContainsKey(7))


{


PropertyGridParameter homepageSponseredeparameter = new PropertyGridParameter("HomePage Sponsored Links", sponseredlinksTypesValues[1].ToString());


homepageSponseredeparameter.Mode = ParameterMode.Raw;


homepageSponseredeparameter.Editor.Add(numberField);


SponseredLinksGrid.Source.Add(homepageSponseredeparameter);


}


SponseredLinksGrid.SetSource(SponseredLinksGrid.Source);


SponseredLinksGrid.DataBind();


}


}





protected void SaveClick(object sender, AjaxEventArgs e)


{


foreach (PropertyGridParameter parameter in SponseredLinksGrid.Source) //THE PROBLEM IS HERE!!!!!!!!!!!!


{


int sponseredLinkType = SponsoredLinkTypesValues.SponseredLinksStringsTypes[parameter.Name];


if (String.IsNullOrEmpty(parameter.Value) )


{


if(SponseredLinksDataSource.IsSponseredLinkTypeValueExist(_currentCtid,sponseredLinkType))


{


SponseredLinksDataSource.DeleteSponseredLinkTypeValue(_currentCtid,sponseredLinkType);


} 


}


else


{


int sponseredLinkValue;


if (!Int32.TryParse(parameter.Value, out sponseredLinkValue))


{


Ext.Msg.Alert("Wrong Ammount", String.Format("The ammount of {0} must be a number between 0-20!", sponseredLinkType)).Show();


continue;


}


SponseredLinksDataSource.UpdateSponseredLinkTypeValue(_currentCtid,sponseredLinkType,sponseredLinkValue); 


}


}





}


protected void RestoreClick(object sender, AjaxEventArgs e)


{


}


}


}
Thanks in advance!!!!
Yossi.