Jan 17, 2012, 2:27 PM
[CLOSED] Problem selecting items in Combobox
Hi, i'm updating a combobox based on whats selected in a grid.
I'm updating the data successfuly, but then i cannot select the items of the combo. Any idea of why? How can i solve this?
Thanks!
Here's my code:
I'm updating the data successfuly, but then i cannot select the items of the combo. Any idea of why? How can i solve this?
Thanks!
Here's my code:
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
class SomeClass
{
public string ID { get; set; }
public string Test { get; set; }
}
void Page_Init(object sender, EventArgs e)
{
Configure();
}
void Page_Load(object sender, EventArgs e)
{
LoadData();
}
protected void Configure()
{
if (UserCanChangeData())
{
GridPanel1.SelectionModel.Add(new CheckboxSelectionModel());
}
else
{
GridPanel1.SelectionModel.Add(new RowSelectionModel() { SingleSelect = true });
}
((RowSelectionModel)GridPanel1.SelectionModel.First()).DirectEvents.RowSelect.Event += new ComponentDirectEvent.DirectEventHandler(RowSelect_Event);
((RowSelectionModel)GridPanel1.SelectionModel.First()).DirectEvents.RowDeselect.Event += new ComponentDirectEvent.DirectEventHandler(RowDeselect_Event);
Store store = this.GridPanel1.GetStore();
JsonReader reader = new JsonReader();
reader.IDProperty = "ID";
reader.Fields.Add(new RecordField("id") { Mapping = "ID" });
reader.Fields.Add(new RecordField("test") { Mapping = "Test" });
store.Reader.Add(reader);
JsonReader jr = new JsonReader();
jr.Fields.Add(new RecordField("id") { Mapping = "ID" });
jr.Fields.Add(new RecordField("test") { Mapping = "Test" });
comboGenerico.GetStore().Reader.Add(jr);
}
List<SomeClass> GetComboData()
{
List<SomeClass> datas = new List<SomeClass>();
Dictionary<string, List<SomeClass>> mixedData = new Dictionary<string, List<SomeClass>>();
mixedData.Add("id1",
new List<SomeClass>()
{
new SomeClass() { ID="1", Test="ID1 - 23"},
new SomeClass() { ID="2", Test="ID1 - 34"},
new SomeClass() { ID="3", Test="ID1 - 45"},
new SomeClass() { ID="4", Test="ID1 - 56"},
new SomeClass() { ID="5", Test="ID1 - 67"}
});
mixedData.Add("id2",
new List<SomeClass>()
{
new SomeClass() { ID="6", Test="ID2 - 78"},
new SomeClass() { ID="7", Test="ID2 - 89"},
new SomeClass() { ID="8", Test="ID2 - 90"},
new SomeClass() { ID="9", Test="ID2 - 101"}
});
mixedData.Add("id3",
new List<SomeClass>() {
new SomeClass() { ID="10", Test="ID3 - 102"},
new SomeClass() { ID="11", Test="ID3 - 103"},
new SomeClass() { ID="12", Test="ID3 - 104"},
});
mixedData.Where(kvp => (GridPanel1.SelectionModel.First() as RowSelectionModel).SelectedRows.Any(row => row.RecordID == kvp.Key)).Select(kvp => kvp.Value).ToList().ForEach(data => datas.AddRange(data));
return datas;
}
void BindCombo()
{
comboGenerico.GetStore().DataSource = GetComboData();
comboGenerico.Mode = X.IsAjaxRequest ? DataLoadMode.Remote : DataLoadMode.Local;
comboGenerico.DisplayField = "test";
comboGenerico.ValueField = "id";
comboGenerico.DataBind();
comboGenerico.Update();
}
void RowSelect_Event(object sender, DirectEventArgs e)
{
X.Msg.Notify("Selecting ", GetSelectedids().Count > 0 ? GetSelectedids().Aggregate((next, prev) => prev + ", " + next) : "").Show();
BindCombo();
}
void RowDeselect_Event(object sender, DirectEventArgs e)
{
X.Msg.Notify("Deselecting ", GetSelectedids().Count > 0 ? GetSelectedids().Aggregate((next, prev) => prev + ", " + next) : "").Show();
}
protected bool UserCanChangeData()
{
//here we check permissions and other stuff
return true;
}
protected void LoadData()
{
Store store = this.GridPanel1.GetStore();
store.DataSource = new object[]
{
new SomeClass()
{
ID = "id1",
Test = "test1"
},
new SomeClass()
{
ID = "id2",
Test = "test2"
},
new SomeClass()
{
ID = "id3",
Test = "test3"
}
};
store.DataBind();
}
protected void Load(object sender, DirectEventArgs e)
{
LoadData();
}
protected void Select(object sender, DirectEventArgs e)
{
X.Msg.Notify("Already Selected", GetSelectedids().Count > 0 ? GetSelectedids().Aggregate((next, prev) => prev + ", " + next) : "").Show();
RowSelectionModel selModel = this.GridPanel1.GetSelectionModel() as RowSelectionModel;
selModel.SelectedRows.Clear();
selModel.SelectedRows.Add(new SelectedRow("id1"));
selModel.SelectedRows.Add(new SelectedRow("id3"));
selModel.UpdateSelection();
}
protected void GetSelected(object sender, DirectEventArgs e)
{
RowSelectionModel selModel = this.GridPanel1.GetSelectionModel() as RowSelectionModel;
StringBuilder rows = new StringBuilder();
foreach (SelectedRow row in selModel.SelectedRows)
{
rows.Append(String.Format("Index: {0}; RecordID: {1}<br/>", row.RowIndex, row.RecordID));
}
X.Msg.Notify("Selected", rows.ToString()).Show();
}
protected List<string> GetSelectedids()
{
return (this.GridPanel1.GetSelectionModel() as RowSelectionModel).SelectedRows.Select(row => row.RecordID).ToList();
}
</script>
<!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>Ext.NET Example</title>
</head>
<body>
<form id="Form1" runat="server">
<ext:ResourceManager ID="ResourceManager1" runat="server" />
<ext:Button ID="Button1" runat="server" Text="Load" OnDirectClick="Load" />
<ext:Button ID="Button2" runat="server" Text="Select some" OnDirectClick="Select" />
<ext:Button ID="Button3" runat="server" Text="Get selected" OnDirectClick="GetSelected" />
<ext:GridPanel ID="GridPanel1" runat="server" AutoHeight="true">
<Store>
<ext:Store ID="Store1" runat="server">
<Reader>
</Reader>
</ext:Store>
</Store>
<ColumnModel ID="ColumnModel1" runat="server">
<Columns>
<ext:Column Header="ID" DataIndex="id" />
<ext:Column Header="Test" DataIndex="test" />
</Columns>
</ColumnModel>
<SelectionModel>
</SelectionModel>
</ext:GridPanel>
<div id="Div1" runat="server">
<ext:ComboBox ID="comboGenerico" runat="server" EmptyText="Seleccione" TypeAhead="true"
ForceSelection="true" MinChars="1" ListWidth="300" PageSize="50" Cls="standardComboBox"
ItemSelector="tr.list-item">
<Store>
<ext:Store ID="storeGenerico" runat="server" />
</Store>
<Template ID="Template1" runat="server">
<Html>
</Html>
</Template>
<Triggers>
<ext:FieldTrigger Icon="Clear" HideTrigger="true" />
</Triggers>
<Listeners>
<BeforeQuery Handler="this.triggers[0][ this.getRawValue().toString().length == 0 ? 'hide' : 'show']();" />
<TriggerClick Handler="if (index == 0) { this.focus().clearValue(); trigger.hide();}" />
<Select Handler="this.triggers[0].show();" />
</Listeners>
</ext:ComboBox>
</div>
</form>
</body>
</html>
Last edited by Daniil; Jan 17, 2012 at 6:56 PM.
Reason: [CLOSED]