473,750 Members | 2,270 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Problem with PropertyGrid control

Hi to everybody.I have a problem with the PropertyGrid
control.I want to display not all the properties of a
generic Control(Button, TextBox,ComboBo x,ecc.).In general
I don't want to display only one category(Appear ance,
Behavior,ecc.) but I want to chose directly which
properties to show.I've read that I can use the
SelectedObjects to put an array of object with some
properties in common with the SelectedObject, and only
properties in common for all the object will be
displayed.I've tryed to build an object with only some
properties and I've tryed to use like I've explain but it
doesn't work(it displays all the properties of the
control).Anyone has some idea to solve my problem?Thank's
to everybody
..
Nov 15 '05 #1
2 3977
You need to have your classes implement ICustomTypeDesc riptor and return
only those properties with a certain attribute.

The code below my signature shows a simple demo of property filtering
according to the Category attribute. In this case it only shows those
proerties in the appearance category.

Well Formed this month has a more in-depth article on customizing properties
for use in the Property Grid including a dynamic filtering system. Check out
the current issue page

--
Bob Powell [MVP]
C#, System.Drawing

The October edition of Well Formed is now available.
Find out how to use DirectX in a Windows Forms control
http://www.bobpowell.net/currentissue.htm

Answer those GDI+ questions with the GDI+ FAQ
http://www.bobpowell.net/gdiplus_faq.htm

Blog http://bobpowelldotnet.blogspot.com

------------------------------------------------------------------
using System;

using System.Drawing;

using System.Drawing. Design;

using System.Collecti ons;

using System.Componen tModel;

using System.Windows. Forms;

using System.Data;

using System.Reflecti on;

namespace PropertyFilter

{

/// <summary>

/// Summary description for Form1.

/// </summary>

public class Form1 : System.Windows. Forms.Form

{

private System.Windows. Forms.Button button1;

private System.Windows. Forms.Button button2;

private System.Windows. Forms.PropertyG rid propertyGrid1;

/// <summary>

/// Required designer variable.

/// </summary>

private System.Componen tModel.Containe r components = null;

Filterable f=new Filterable();

public Form1()

{

//

// Required for Windows Form Designer support

//

InitializeCompo nent();

//

// TODO: Add any constructor code after InitializeCompo nent call

//

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Disp ose();

}

}

base.Dispose( disposing );

}

#region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeCompo nent()

{

this.button1 = new System.Windows. Forms.Button();

this.button2 = new System.Windows. Forms.Button();

this.propertyGr id1 = new System.Windows. Forms.PropertyG rid();

this.SuspendLay out();

//

// button1

//

this.button1.Lo cation = new System.Drawing. Point(8, 32);

this.button1.Na me = "button1";

this.button1.Ta bIndex = 0;

this.button1.Te xt = "With";

this.button1.Cl ick += new System.EventHan dler(this.butto n1_Click);

//

// button2

//

this.button2.Lo cation = new System.Drawing. Point(8, 72);

this.button2.Na me = "button2";

this.button2.Ta bIndex = 0;

this.button2.Te xt = "Without";

this.button2.Cl ick += new System.EventHan dler(this.butto n2_Click);

//

// propertyGrid1

//

this.propertyGr id1.Anchor =
((System.Window s.Forms.AnchorS tyles)((((Syste m.Windows.Forms .AnchorStyles.T o
p | System.Windows. Forms.AnchorSty les.Bottom)

| System.Windows. Forms.AnchorSty les.Left)

| System.Windows. Forms.AnchorSty les.Right)));

this.propertyGr id1.CommandsVis ibleIfAvailable = true;

this.propertyGr id1.LargeButton s = false;

this.propertyGr id1.LineColor = System.Drawing. SystemColors.Sc rollBar;

this.propertyGr id1.Location = new System.Drawing. Point(160, 16);

this.propertyGr id1.Name = "propertyGrid1" ;

this.propertyGr id1.Size = new System.Drawing. Size(272, 240);

this.propertyGr id1.TabIndex = 1;

this.propertyGr id1.Text = "propertyGrid1" ;

this.propertyGr id1.ViewBackCol or = System.Drawing. SystemColors.Wi ndow;

this.propertyGr id1.ViewForeCol or = System.Drawing. SystemColors.Wi ndowText;

//

// Form1

//

this.AutoScaleB aseSize = new System.Drawing. Size(5, 13);

this.ClientSize = new System.Drawing. Size(440, 266);

this.Controls.A dd(this.propert yGrid1);

this.Controls.A dd(this.button1 );

this.Controls.A dd(this.button2 );

this.Name = "Form1";

this.Text = "Form1";

this.ResumeLayo ut(false);

}

#endregion

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.Run (new Form1());

}

private void button1_Click(o bject sender, System.EventArg s e)

{

this.f.Filtered =true;

this.propertyGr id1.SelectedObj ect=f;

this.propertyGr id1.Refresh();

}

private void button2_Click(o bject sender, System.EventArg s e)

{

this.f.Filtered =false;

this.propertyGr id1.SelectedObj ect=f;

this.propertyGr id1.Refresh();

}

}

class Filterable : ICustomTypeDesc riptor

{

bool _filtered;

public bool Filtered

{

get{return _filtered;}

set{_filtered=v alue;}

}

string _stringOne;

[Category("Other ")]

public string StringOne

{

get{return _stringOne;}

set{_stringOne= value;}

}

string _stringTwo;

[Category("Appea rance")]

public string StringTwo

{

get{return _stringTwo;}

set{_stringTwo= value;}

}

#region ICustomTypeDesc riptor Members

public TypeConverter GetConverter()

{

// TODO: Add Filterable.GetC onverter implementation

return TypeDescriptor. GetConverter(th is,true);

}

public EventDescriptor Collection GetEvents(Attri bute[] attributes)

{

// TODO: Add Filterable.GetE vents implementation

return TypeDescriptor. GetEvents(this, attributes,true );

}

EventDescriptor Collection
System.Componen tModel.ICustomT ypeDescriptor.G etEvents()

{

// TODO: Add
Filterable.Syst em.ComponentMod el.ICustomTypeD escriptor.GetEv ents
implementation

return TypeDescriptor. GetEvents(this, true);

}

public string GetComponentNam e()

{

// TODO: Add Filterable.GetC omponentName implementation

return TypeDescriptor. GetComponentNam e(this,true);

}

public object GetPropertyOwne r(PropertyDescr iptor pd)

{

// TODO: Add Filterable.GetP ropertyOwner implementation

return this;

}

public AttributeCollec tion GetAttributes()

{

// TODO: Add Filterable.GetA ttributes implementation

return TypeDescriptor. GetAttributes(t his,true);

}

public PropertyDescrip torCollection GetProperties(A ttribute[] attributes)

{

// TODO: Add Filterable.GetP roperties implementation

PropertyDescrip torCollection
pdc=TypeDescrip tor.GetProperti es(this,attribu tes,true);

if(_filtered)

{

PropertyDescrip torCollection pds=new PropertyDescrip torCollection(n ew
PropertyDescrip tor[0]);

foreach(Propert yDescriptor pd in pdc)

{

Attribute a=pd.Attributes[typeof(Category Attribute)];

if(a!=null && ((CategoryAttri bute)a).Categor y=="Appearance" )

{

pds.Add(pd);

}

}

return pds;

}

else

return TypeDescriptor. GetProperties(t his,attributes, true);

}

PropertyDescrip torCollection
System.Componen tModel.ICustomT ypeDescriptor.G etProperties()

{

// TODO: Add
Filterable.Syst em.ComponentMod el.ICustomTypeD escriptor.GetPr operties
implementation

PropertyDescrip torCollection pdc=TypeDescrip tor.GetProperti es(this,true);

if(_filtered)

{

PropertyDescrip torCollection pds=new PropertyDescrip torCollection(n ew
PropertyDescrip tor[0]);

foreach(Propert yDescriptor pd in pdc)

{

Attribute a=pd.Attributes[typeof(Category Attribute)];

if(a!=null && ((CategoryAttri bute)a).Categor y=="Appearance" )

{

pds.Add(pd);

}

}

return pds;

}

else

return pdc;

}

public object GetEditor(Type editorBaseType)

{

// TODO: Add Filterable.GetE ditor implementation

return TypeDescriptor. GetEditor(this, typeof(UITypeEd itor), true);

}

public PropertyDescrip tor GetDefaultPrope rty()

{

// TODO: Add Filterable.GetD efaultProperty implementation

return TypeDescriptor. GetDefaultPrope rty(this, true);

}

public EventDescriptor GetDefaultEvent ()

{

// TODO: Add Filterable.GetD efaultEvent implementation

return TypeDescriptor. GetDefaultEvent (this,true);

}

public string GetClassName()

{

// TODO: Add Filterable.GetC lassName implementation

return TypeDescriptor. GetClassName(th is,true);

}

#endregion

}

}

------------------------------------------------------------------

"Mevar81" <to*****@hotmai l.com> wrote in message
news:07******** *************** *****@phx.gbl.. .
Hi to everybody.I have a problem with the PropertyGrid
control.I want to display not all the properties of a
generic Control(Button, TextBox,ComboBo x,ecc.).In general
I don't want to display only one category(Appear ance,
Behavior,ecc.) but I want to chose directly which
properties to show.I've read that I can use the
SelectedObjects to put an array of object with some
properties in common with the SelectedObject, and only
properties in common for all the object will be
displayed.I've tryed to build an object with only some
properties and I've tryed to use like I've explain but it
doesn't work(it displays all the properties of the
control).Anyone has some idea to solve my problem?Thank's
to everybody
.

Nov 15 '05 #2
Thank you for your suggestions.Now I'll try what you've
said.Thank you again for your great example!
-----Original Message-----
You need to have your classes implement ICustomTypeDesc riptor and returnonly those properties with a certain attribute.

The code below my signature shows a simple demo of property filteringaccording to the Category attribute. In this case it only shows thoseproerties in the appearance category.

Well Formed this month has a more in-depth article on customizing propertiesfor use in the Property Grid including a dynamic filtering system. Check outthe current issue page

--
Bob Powell [MVP]
C#, System.Drawing

The October edition of Well Formed is now available.
Find out how to use DirectX in a Windows Forms control
http://www.bobpowell.net/currentissue.htm

Answer those GDI+ questions with the GDI+ FAQ
http://www.bobpowell.net/gdiplus_faq.htm

Blog http://bobpowelldotnet.blogspot.com

--------------------------------------------------------- ---------using System;

using System.Drawing;

using System.Drawing. Design;

using System.Collecti ons;

using System.Componen tModel;

using System.Windows. Forms;

using System.Data;

using System.Reflecti on;

namespace PropertyFilter

{

/// <summary>

/// Summary description for Form1.

/// </summary>

public class Form1 : System.Windows. Forms.Form

{

private System.Windows. Forms.Button button1;

private System.Windows. Forms.Button button2;

private System.Windows. Forms.PropertyG rid propertyGrid1;

/// <summary>

/// Required designer variable.

/// </summary>

private System.Componen tModel.Containe r components = null;
Filterable f=new Filterable();

public Form1()

{

//

// Required for Windows Form Designer support

//

InitializeComp onent();

//

// TODO: Add any constructor code after InitializeCompo nent call
//

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dis pose();

}

}

base.Dispose ( disposing );

}

#region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeCompo nent()

{

this.button1 = new System.Windows. Forms.Button();

this.button2 = new System.Windows. Forms.Button();

this.propertyG rid1 = new System.Windows. Forms.PropertyG rid();
this.SuspendLa yout();

//

// button1

//

this.button1.L ocation = new System.Drawing. Point(8, 32);

this.button1.N ame = "button1";

this.button1.T abIndex = 0;

this.button1.T ext = "With";

this.button1.C lick += new System.EventHan dler (this.button1_C lick);
//

// button2

//

this.button2.L ocation = new System.Drawing. Point(8, 72);

this.button2.N ame = "button2";

this.button2.T abIndex = 0;

this.button2.T ext = "Without";

this.button2.C lick += new System.EventHan dler (this.button2_C lick);
//

// propertyGrid1

//

this.propertyG rid1.Anchor =
((System.Windo ws.Forms.Anchor Styles) ((((System.Wind ows.Forms.Ancho rStyles.Top | System.Windows. Forms.AnchorSty les.Bottom)

| System.Windows. Forms.AnchorSty les.Left)

| System.Windows. Forms.AnchorSty les.Right)));

this.propertyG rid1.CommandsVi sibleIfAvailabl e = true;

this.propertyG rid1.LargeButto ns = false;

this.propertyG rid1.LineColor = System.Drawing. SystemColors.Sc rollBar;
this.propertyG rid1.Location = new System.Drawing. Point (160, 16);
this.propertyG rid1.Name = "propertyGrid1" ;

this.propertyG rid1.Size = new System.Drawing. Size(272, 240);
this.propertyG rid1.TabIndex = 1;

this.propertyG rid1.Text = "propertyGrid1" ;

this.propertyG rid1.ViewBackCo lor = System.Drawing. SystemColors.Wi ndow;
this.propertyG rid1.ViewForeCo lor = System.Drawing. SystemColors.Wi ndowText;
//

// Form1

//

this.AutoScale BaseSize = new System.Drawing. Size(5, 13);

this.ClientSiz e = new System.Drawing. Size(440, 266);

this.Controls. Add(this.proper tyGrid1);

this.Controls. Add(this.button 1);

this.Controls. Add(this.button 2);

this.Name = "Form1";

this.Text = "Form1";

this.ResumeLay out(false);

}

#endregion

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.Ru n(new Form1());

}

private void button1_Click(o bject sender, System.EventArg s e)
{

this.f.Filtere d=true;

this.propertyG rid1.SelectedOb ject=f;

this.propertyG rid1.Refresh();

}

private void button2_Click(o bject sender, System.EventArg s e)
{

this.f.Filtere d=false;

this.propertyG rid1.SelectedOb ject=f;

this.propertyG rid1.Refresh();

}

}

class Filterable : ICustomTypeDesc riptor

{

bool _filtered;

public bool Filtered

{

get{return _filtered;}

set{_filtered= value;}

}

string _stringOne;

[Category("Other ")]

public string StringOne

{

get{return _stringOne;}

set{_stringOne =value;}

}

string _stringTwo;

[Category("Appea rance")]

public string StringTwo

{

get{return _stringTwo;}

set{_stringTwo =value;}

}

#region ICustomTypeDesc riptor Members

public TypeConverter GetConverter()

{

// TODO: Add Filterable.GetC onverter implementation

return TypeDescriptor. GetConverter(th is,true);

}

public EventDescriptor Collection GetEvents(Attri bute[] attributes)
{

// TODO: Add Filterable.GetE vents implementation

return TypeDescriptor. GetEvents(this, attributes,true );

}

EventDescripto rCollection
System.Compone ntModel.ICustom TypeDescriptor. GetEvents()

{

// TODO: Add
Filterable.Sys tem.ComponentMo del.ICustomType Descriptor.Ge tEventsimplementati on

return TypeDescriptor. GetEvents(this, true);

}

public string GetComponentNam e()

{

// TODO: Add Filterable.GetC omponentName implementation

return TypeDescriptor. GetComponentNam e(this,true);

}

public object GetPropertyOwne r(PropertyDescr iptor pd)

{

// TODO: Add Filterable.GetP ropertyOwner implementation

return this;

}

public AttributeCollec tion GetAttributes()

{

// TODO: Add Filterable.GetA ttributes implementation

return TypeDescriptor. GetAttributes(t his,true);

}

public PropertyDescrip torCollection GetProperties (Attribute[] attributes)
{

// TODO: Add Filterable.GetP roperties implementation

PropertyDescri ptorCollection
pdc=TypeDescri ptor.GetPropert ies(this,attrib utes,true);

if(_filtered )

{

PropertyDescri ptorCollection pds=new PropertyDescrip torCollection(n ewPropertyDescri ptor[0]);

foreach(Proper tyDescriptor pd in pdc)

{

Attribute a=pd.Attributes[typeof(Category Attribute)];

if(a!=null && ((CategoryAttri bute) a).Category=="A ppearance")
{

pds.Add(pd);

}

}

return pds;

}

else

return TypeDescriptor. GetProperties (this,attribute s,true);
}

PropertyDescri ptorCollection
System.Compone ntModel.ICustom TypeDescriptor. GetProperties ()
{

// TODO: Add
Filterable.Sys tem.ComponentMo del.ICustomType Descriptor.Ge tPropertiesimplementati on

PropertyDescri ptorCollection pdc=TypeDescrip tor.GetProperti es(this,true);
if(_filtered )

{

PropertyDescri ptorCollection pds=new PropertyDescrip torCollection(n ewPropertyDescri ptor[0]);

foreach(Proper tyDescriptor pd in pdc)

{

Attribute a=pd.Attributes[typeof(Category Attribute)];

if(a!=null && ((CategoryAttri bute) a).Category=="A ppearance")
{

pds.Add(pd);

}

}

return pds;

}

else

return pdc;

}

public object GetEditor(Type editorBaseType)

{

// TODO: Add Filterable.GetE ditor implementation

return TypeDescriptor. GetEditor(this, typeof (UITypeEditor), true);
}

public PropertyDescrip tor GetDefaultPrope rty()

{

// TODO: Add Filterable.GetD efaultProperty implementation

return TypeDescriptor. GetDefaultPrope rty(this, true);

}

public EventDescriptor GetDefaultEvent ()

{

// TODO: Add Filterable.GetD efaultEvent implementation

return TypeDescriptor. GetDefaultEvent (this,true);

}

public string GetClassName()

{

// TODO: Add Filterable.GetC lassName implementation

return TypeDescriptor. GetClassName(th is,true);

}

#endregion

}

}

--------------------------------------------------------- ---------
"Mevar81" <to*****@hotmai l.com> wrote in message
news:07******* *************** ******@phx.gbl. ..
Hi to everybody.I have a problem with the PropertyGrid
control.I want to display not all the properties of a
generic Control(Button, TextBox,ComboBo x,ecc.).In general I don't want to display only one category(Appear ance,
Behavior,ecc.) but I want to chose directly which
properties to show.I've read that I can use the
SelectedObjects to put an array of object with some
properties in common with the SelectedObject, and only
properties in common for all the object will be
displayed.I've tryed to build an object with only some
properties and I've tryed to use like I've explain but it doesn't work(it displays all the properties of the
control).Anyone has some idea to solve my problem? Thank's to everybody
.

.

Nov 15 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
2895
by: Terry | last post by:
I have a very basic program, but for some reason I can't get it to behave properly. What I want is a basic form with a TabControl that fills the entire form. The tab control should have 4 tabs with a single PropertyGrid control on each tab that fills it's parent's tab page's client area. Here's what I did. 1. Create a new project.
4
5699
by: Zoury | last post by:
Hi! Is it possible to use the PropertyGrid control without bind it to a control? As if it were a standard list? I would like to add "properties" in it but i never know what it will be. For now I use a DataGrid with 2 columns in it where the first one as the ReadOnly property property set to true.. it's quite ugly. if it's impossible then i'm open to any suggestions. :O)
0
2159
by: Jay Shakankar via .NET 247 | last post by:
Dear Friends, I have been assigned to develop a Custom PropertyGrid with lookand fill like the link below. http://www.visualhint.com/feature5.php In the PropertyGrid value cells, I am assigned to display thecontrols like NumericUpDown, RadioButtons, CheckBox, ListBoxetc.I read several articles both in CP and MSDN and gathered thefollowing informations. I request the CPians to comment on thebelow points(point 1 to point 3) 1.It is not...
0
6330
by: jays | last post by:
Dear Friends, I have been assigned to develop a Custom PropertyGrid with look and fill like the link below http://www.visualhint.com/feature5.php In the PropertyGrid value cells, I am assigned to display the controls like NumericUpDown, RadioButtons, CheckBox, ListBox etc I read several articles and gathered the following informations I request you to comment on the below points(point 1 to point 3)
1
11882
by: ANDRES BECERRA | last post by:
Herfried K. Wagner was kind enough to point me to the PropertyGrid control http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwindowsformspropertygridclasstopic.asp I have found a few samples of how to use the PropertyGrid control and have gained a decent understanding of it. But of course, as it usually the case, my needs go far beyond the simple examples shown in online samples. All the online samples show how to take a class...
7
9730
by: siddhiash | last post by:
Hi Friends I want to add PasswordChar Property which shows ****** for string which I type in PropertyGrid Control. Regards, Siddharth
4
3073
by: Bernie Yaeger | last post by:
How can I set the browsableattributes of the control that has been selected (selectedobject) by the propertygrid? Here's what I'm after - I want to open a form with a propertygrid in it. The selectedobject will be the form itself. I want the user to change certain properties, thus changing the form. This works fine, but what I really want is to take the changes and lock them into a config file, such that this pc will then display all...
5
1726
by: Ger | last post by:
The propertygrid is a great control, but I would like to show a more descriptive text for the properties in the control. I tried to find a solution within the system.componentmodel but did not succeed. As far as I know I can only show the user the property name I use in my class, like "cubic_inches". I would like the user to see something like "Cylinder cubic inches". Is it in any way possible to associate a text to the name of the...
6
6934
by: Steve Teeples | last post by:
Can someone show me an example of how to place a "CheckedListBox" property within a PropertyGrid? -- ----------- Thanks, Steve
0
8838
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
1
9339
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9256
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
8260
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
6804
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
4713
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
4887
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3322
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
2804
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.