11 Ağustos 2011 Perşembe

Devexpress grid'i üzerindeki combobox değiştiğinde...

Devexpress gridview bileşeni ile oluşturduğum tabloda benden istenen edit tuşuna basıldığında grid bileşenlerinden birinin combobox olarak çıkması ve buradan seçilen değere göre gridin edit formundan çıkmadan bazı form alanlarının görüntülenmesi, görüntülenmemesi ve bazılarına da çerçeve rengi değiştirilerek renk verilmesi.
Öncelikle bunun için OnCellEditorInitialize="gridim_CellEditorInitialize" içinde işlemler yaptım fakat bunu yaptığımda görünmez olarak getirdiğim alanları combobox için yazdığım script ile görünür kılamadım. Bunların object null referance exception'a neden olması, visible false olunca hiçbir şekilde oluşturulmadıklarını gösterdi.
Bunun üzerine tüm işlemleri javascript ile yapmam gerektiğini anlayıp işe koyuldum.
Öncelikle ilk görüntülemede bir javascript kullanarak combobox için önceden girilmiş değerlere göre bir görünüm elde etmeliydim.Bunun için de gridin Edit edilme fonksiyonunundaki kontrolü ele geçirmem gerekiyordu, ben de javascriptimi "function Edit(key, index)" hazırladım ve içine fonksiyonu çağırmak için gerekli ayarlamaları yaptım. Bu çağırdığım fonksiyon kendi içinde OnGetRowValues isimli bir fonksiyon daha çağırıyor. O da aşağıda görebileceğiniz gibi görünümü etkiliyor.
Görünümleri bir türlü blogumda yapıştıramadığım için biraz şifreli göndermek zorunda kaldım. Kodun içinde aaa yerine < koyarsanız çalışır konuma gelecektir. @"aaadx:aaaASPxGridView ID="gridim" ClientInstanceName="gridim" runat="server" AutoGenerateColumns="False" KeyFieldName="Id" DataSourceID="odsGridim" Caption="BAŞLIĞIM">

aaadx:GridViewDataColumn Name="GuncelleButonu" VisibleIndex="0">
aaaeditformsettings VisibleIndex="0" CaptionLocation="None" Visible="False" />
aaadataitemtemplate>
aaaa id="butEdit" style="color:#3E6B96;text-decoration:none;" onclick="Edit('aaa%# Container.KeyValue.ToString()%>', 'aaa%# Container.VisibleIndex.ToString()%>')" href="#"><%# Container.Column.Caption%>
aaa/DataItemTemplate>
aaa/dx:GridViewDataColumn>
aaadx:GridViewDataComboBoxColumn FieldName="AraDegerlendirmeId" Caption="Combo Baslık" EditFormSettings-VisibleIndex="1" Visible="False">
aaapropertiescombobox TextField="Secenek" ValueField="Id" EnableSynchronization="False" IncrementalFilteringMode="StartsWith">
aaaclientsideevents SelectedIndexChanged= "function(s, e) { OnCountryChanged(s); }" />
aaa/PropertiesComboBox>
aaa/dx:GridViewDataComboBoxColumn>
aaa/Columns>
aaa/dx:ASPxGridView>"


@"function Edit(key, index)
{
gridim.StartEditRow(index);
gridim.GetRowValues(index, 'kolon1;kolon2;kolon3', OnGetRowValues);
//Yukarıda kolon1, 2, 3 için değerlerini almayı düşündüğünüz column isimlerini yazıyorsunuz...
}

function OnGetRowValues(values) {
var value = values[0];
//Edit fonksiyonundan gelen ilk kolon1 için alınan değer bu oluyor, bundan gelen değere göre görüntüyü değiştireceğimizi varsayıyorum..
if (value != 0) {
var obj2 = gridim.GetEditor("kolon3").GetMainElement();
var obj = gridim.GetEditor("kolon4").GetMainElement();
//burada görüntüsünü değiştirmeyi planladığınız kolonları alıyorsunuz

obj.style.border = "0px solid gray";
obj2.style.border = "0px solid gray";

if (value == 4) {
//buradaki değere göre koşulları belirleyip,su ise bunu yap diyorsunuz ...
gridim.GetEditor("kolon3").SetVisible(true); //görünür yap
gridim.GetEditor("kolon4").SetVisible(true);

obj.style.border = "2px solid gray";
obj2.style.border = "2px solid gray";
obj.style.BackColor = "white";
obj2.style.BackColor = "white";
}
else if (value == 5) {
//vidividi...
}
else {
gridim.GetEditor("kolon3").SetValue(""); //içini boşalt

obj.style.border = "0px solid whitesmoke";
obj2.style.border = "0px solid whitesmoke";
//görünmez yap, gibi....
gridim.GetEditor("kolon3").SetVisible(false);
gridim.GetEditor("kolon4").SetVisible(false);
}
}
}"

Hiç yorum yok:

Yorum Gönder