!
function ProcessKeyPress(s, evt) {
var charCode = (evt.htmlEvent.which) ? evt.htmlEvent.which : event.keyCode
if (charCode > 31 && (charCode 57))
_aspxPreventEvent(evt.htmlEvent);
}
!
!
function ProcessKeyPress(s, evt) {
var charCode = (evt.htmlEvent.which) ? evt.htmlEvent.which : event.keyCode
if (charCode > 31 && (charCode 57))
_aspxPreventEvent(evt.htmlEvent);
}
!
PersistentRepository , Aynı işi gören bir çok repositoryItem ı farklı yerlerde kullanmanız için geliştirilmiş bir control dür.
Şöyleki Sehir RepositoryItemLookUpEdit iniz olsun ve bunu aynı form üzerindeki 3 adet GridControl 1 adet VGridControl de kullandığınızı düşünelim. Hepsinin kendi içinde rlkSehir1,rlkSehir2 gibi oluşturmak yerine bir tane PersistentRepository içinde oluşturuyoruz ve gridlerin ExternalRepository property sine gidip PersistentRepository imizi verelim. Artık Gridlerin kolonlarındaki ColumnEdit propertysinde kendi In-Place Repository sinde olmamasına rağmen rlkSehir RepositoryItemLookUpEdit ini görebiliyoruz.
Böylece hem performans kazancı sağlıyor hemde her biri için ayrı ayrı düzenleme yapma zahmetinden kurtuluyoruz.
public static void LookupEditeVeriDoldur(LookUpEdit lue) { //Burda datasource olarak datatable, list veya linq entityset ,table vb verebiliriz. lue.Properties.DataSource = VeriKaynagim.Veri; //EditValue içeriğine yazılacak veri kaynağındaki column/property lue.Properties.ValueMember = "ID"; //Kullanıcı lookup dan bir şey seçtiği ve lookup kapandığında görünecek olan property/column. Boş bırakıldığında object.ToString() methodu çağırılır ve o şekilde görünür. lue.Properties.DisplayMember = "ADI"; //Değer null olduğunda yani herhangi bir şey seçilmediği durumda görünecek olan yazı lue.Properties.NullText = "<Lütfen bir Ad Seçiniz>"; //Önceden eklenmiş olabileceğini düşünüp lookup un columlarını siliyoruz lue.Properties.Columns.Clear(); //Veri kaynağından göstermek istediğimiz column/property leri Lookup'ın Columnlarına ekliyoruz lue.Properties.Columns.Add(new LookUpColumnInfo("ADI", 20, "Kullanıcı Adı")); }
Devexpress 8.2.6 sürümünde XtraGridControl ile yaşadığım refresh problemi şu şekilde gerçekleşti : EntitySet i datasource olarak verdikten sonra, arka planda eklediğim herhangi bir entity grid üzerinde görünmemekteydi. Yani sadece grid üzerinden yaptığım değişiklikler görünüyor, arkaplandaki değişiklikler EntitySet nesnesi üzerinde debug anında görünmesine rağmen, grid üzerinde görünmüyordu.
Problemi teşhis ettikten sonra, ilk olarak grid nesnemin üzerindeki RefreshDataSource() methodunu denedim ancak; problemi gidermedi.
Sonrasında grid üzerindeki DataSource property sini tekrar aynı EntitySet nesnesini göndererek set ettim ve bir umutla çalıştırdım. Herhangi bir değişiklik yoktu.
Çözüm:
EntitySet<T> nesnemin methodlarına gözatarken GetNewBindingList() methodu dikkatimi çekti. Sorunun çözümü olduğunu düşünerek , hemen denedim ve bingo, sorun giderilmişti.
Niçin böyle bir methoda gerek duyulduğunu henüz anlamış değilim ancak anladığımda burada yayımlıyor olacağım.
Vertical grid üzerindeki seçili kaydı almak istiyorsanız şu şekilde yapabilirsiniz:
1.
BenimEntityTipim gel =verticalGrid1.GetRecordObject(verticalGrid1.FocusedRecord)
as
BenimEntityTipim;
Asp.net Gridview üzerinde yeni bir kayıt eklerken varsayılan değerleri server-side olarak belirlemeye yarayan bu Event’ın kullanımı şu şekildedir :
protected void dxgridBlogOrnek_InitNewRow(object sender, DevExpress.Web.Data.ASPxDataInitNewRowEventArgs e) { e.NewValues["FieldName"] = 15; }
Burda dikkat edilmesi gereken nokta FieldName olarak belirttiğimiz kolon un EditForm üzerinde görünüyor olması gerekmekte, yani visible ını false yaptığımız bir column a verdiğimiz değer malesef kaydedilmiyor.
Devexpress AspxCloudControl u elimizde hazır bulunan bir cloud datasını ekrana basmak için kullandığımız bir devex kontrolüdür.
Örnekte bir blog sitesindeki tag leri aspx cloud control ü kullanarak nasıl ekrana çıkartacağımız gösterilmiştir.
İlk olarak Visual Studio yu açarak, Yeni bir Web Project oluşturuyoruz. Proje içinde; öncelikle Tag adında bir class oluşturup Name,DisplayName,Count adında üç property ekliyoruz.
Sonra default.aspx içerisine devexpress CloudControl u sürükleyip bırakıyoruz. Default.aspx.cs içerisine gelip, Yeni bir tag tipinde generic list oluşturup, içine tag elemanlarını ekliyoruz. Bu elemanların count propertylerinin birbirinden farklı olması cloud controlün görünümünü etkileyen asıl unsurdur. Daha sonra CloudControl ün TextField alanını “DisplayName” , NameField alanını “Name”, NavigateUrlField alanını “Name” , NavigateUrlFormatString alanını “http://www.yilmazyavuz.com/yyblog/index.php/tag/{0}/” , ValueField alanını “Count” şeklinde atıyoruz. Burdaki alanlardan önemli olan TextField , ValueField ve NavigateUrlField alanları bu alanlar :
TextField : Önyüzde gösterilecek olan yazı,
ValueField: Önyüzde gösterilecek olan yazıyı boyutlandırmak için kullanılacak değer.
NavigateUrlField : Önyüzde gösterilecek olan elemanın gideceği adres yada NavigateUrlFormatString de belirtilen stringin içerisine yerleştirilecek değer.
NavigateUrlFormatString : içinde sadece {0} alanının NavigateUrlField değeriyle doldurulacağı string.Format yazımı ile aynı olan değer.
Son olarak oluşturduğumuz generic tag listesini aspxCloudControl ün DataSource özelliğine atıyoruz, ve databind methodunu çağırıyoruz.
Böylece nurtopu gibi bir tag cloud umuz olmuş oluyor .
Örnekte anlatılanların koda dökülmüş hali aşağıdadır.
default.aspx :
01.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Blog.DevexTagCloud._Default" %>
02.
03.
<%@ Register Assembly="DevExpress.Web.v9.1, Version=9.1.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"
04.
Namespace="DevExpress.Web.ASPxCloudControl" TagPrefix="dxcc" %>
05.
06.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
07.
09.
<
head
runat
=
"server"
>
10.
<
title
></
title
>
11.
</
head
>
12.
<
body
>
13.
<
form
id
=
"form1"
runat
=
"server"
>
14.
<
div
>
15.
<
dxcc:ASPxCloudControl
ID
=
"ASPxCloudControl1"
runat
=
"server"
>
16.
</
dxcc:ASPxCloudControl
>
17.
</
div
>
18.
</
form
>
19.
</
body
>
20.
</
html
>
default.aspx.cs :
01.
using
System;
02.
using
System.Collections.Generic;
03.
04.
namespace
Blog.DevexTagCloud
05.
{
06.
public
partial
class
_Default : System.Web.UI.Page
07.
{
08.
protected
void
Page_Load(
object
sender, EventArgs e)
09.
{
10.
List<Tag> myTags =
new
List<Tag>(10);
11.
myTags.Add(
new
Tag(
"DevExpress"
,20));
12.
myTags.Add(
new
Tag(
"Csharp"
,25));
13.
myTags.Add(
new
Tag(
"Asp.Net"
,15));
14.
myTags.Add(
new
Tag(
"Mono"
,5));
15.
myTags.Add(
new
Tag(
"Objective-C"
,2));
16.
myTags.Add(
new
Tag(
"Telerik"
,1));
17.
myTags.Add(
new
Tag(
"Wcf"
,2));
18.
myTags.Add(
new
Tag(
"TXTextControl"
,0));
19.
20.
ASPxCloudControl1.NameField =
"Name"
;
21.
ASPxCloudControl1.TextField =
"DisplayName"
;
22.
ASPxCloudControl1.ValueField=
"Count"
;
23.
ASPxCloudControl1.NavigateUrlField =
"Name"
;
24.
ASPxCloudControl1.NavigateUrlFormatString =
"http://www.yilmazyavuz.com/yyblog/index.php/tag/{0}/"
;
25.
26.
ASPxCloudControl1.DataSource = myTags;
27.
ASPxCloudControl1.DataBind();
28.
}
29.
}
30.
}
Tag.cs :
01.
namespace
Blog.DevexTagCloud
02.
{
03.
public
class
Tag
04.
{
05.
public
Tag(
string
name,
int
count)
06.
{
07.
DisplayName = name;
08.
Name = name.ToLower();
09.
Count = count;
10.
}
11.
12.
public
int
Count {
get
;
set
; }
13.
public
string
DisplayName {
get
;
set
; }
14.
public
string
Name {
get
;
set
; }
15.
}
16.
}
Firstly I created two simple entity classes named Article and Comment :
Article.cs :
01.
using
System.Collections.Generic;
02.
03.
namespace
DevexMasterChildSample
04.
{
05.
public
class
Article
06.
{
07.
public
string
Subject {
get
;
set
; }
08.
public
string
Body {
get
;
set
; }
09.
public
List<Comment> CommentList {
get
;
set
; }
10.
11.
}
12.
}
Comment.cs
01.
using
System;
02.
03.
namespace
DevexMasterChildSample
04.
{
05.
public
class
Comment
06.
{
07.
public
string
Author {
get
;
set
; }
08.
public
string
Message {
get
;
set
; }
09.
public
DateTime CommentDate {
get
;
set
; }
10.
11.
}
12.
}
Then I Added a simple Windows form file to my project named Form1.cs and in Design Mode I draged a Devexpress GridControl to my form and changed it’s size to fit my form.
After that I created a new level for Gridview1 shown below
Then I renamed the Level to CommentList it must be exactly the same with Master Object’s child collection property name. In this case it is CommentList on Article object
Form1.cs
01.
using
System;
02.
using
System.Collections.Generic;
03.
using
System.Windows.Forms;
04.
05.
namespace
DevexMasterChildSample
06.
{
07.
public
partial
class
Form1 : Form
08.
{
09.
public
Form1()
10.
{
11.
InitializeComponent();
12.
}
13.
14.
private
void
Form1_Load(
object
sender, EventArgs e)
15.
{
16.
List<Article> articles =
new
List<Article>();
17.
articles.Add(
new
Article
18.
{
19.
Body =
"Bu yazı devexpress gridcontrolü anlatmaktadır."
,
20.
CommentList =
21.
new
List<Comment>
22.
{
23.
new
Comment
24.
{
25.
Author =
"Erdem"
,
26.
CommentDate = DateTime.Now,
27.
Message =
"Yazınız güzel olmuş."
28.
}
29.
},
30.
Subject =
"Devexpress GridControl master Child Örnek"
31.
});
32.
articles.Add(
new
Article
33.
{
34.
Body =
"Bu yazı devexpress treeview anlatmaktadır."
,
35.
CommentList =
36.
new
List<Comment>
37.
{
38.
new
Comment
39.
{
40.
Author =
"Alkan"
,
41.
CommentDate = DateTime.Now,
42.
Message =
"Yazınız pek anlaşılır olmamış."
43.
}
44.
},
45.
Subject =
"Devexpress Treeview Drag-drop Örnek"
46.
});
47.
48.
gridControl1.DataSource = articles;
49.
50.
}
51.
}
52.
}
DXperienceUniversal-10.2.8 SetUp
http://downloads.devexpress.com/82477620-2e35-4483-8bab-aacd3008984c/0.0.0.0/DXperience/2010.2/8/DXperienceUniversal-10.2.8.exe
IDETools 10.2.8 SetUp
.NET Documentation Installer VS2005-2008 , CodeRush and Refactor! Installer .NET Documentation Installer (279 Mb) for VS2005, VS2008
http://downloads.devexpress.com/Help/DXperienceHelp2005-10.2.7.exe
DXperienceUniversal-10.2.8 what’s new
http://www.devexpress.com/Support/WhatsNew/DXperience/files/10.2.8.xml