I can suggest the following solution.
Example
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
Store store = this.GridPanel1.GetStore();
store.DataSource = new object[]
{
new object[] { "id1", "DateField" },
new object[] { "id2", "ComboBox" },
new object[] { "id3", "DateField" },
new object[] { "id4", "ComboBox" },
};
store.DataBind();
}
}
protected void ComboBoxStore_RefreshData(object sender, StoreRefreshDataEventArgs e)
{
Store store = sender as Store;
string id = e.Parameters["id"];
store.DataSource = new object[]
{
new object[] { id + "_" + DateTime.Now.Second, "1" },
new object[] { id + "_" + DateTime.Now.Second, "2" }
};
store.DataBind();
}
</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 runat="server">
<title>Ext.NET Example</title>
<script type="text/javascript">
var setEditor = function (e) {
var column = e.grid.getColumnModel().columns[e.column],
ed = column.getCellEditor(e.row);
if (ed) {
ed.destroy();
}
switch (e.record.get("editor")) {
case "DateField" :
column.setEditor(new Ext.form.DateField());
break
case "ComboBox" :
column.setEditor(new Ext.form.ComboBox({
displayField : "text",
valueField: "value",
triggerAction: "all",
store : ComboBoxStore
}));
ComboBoxStore.on(
"beforeload",
function (store, options) {
options.params = {
id : e.record.data.id
}
},
null,
{
single : true
});
break;
}
};
var testRenderer = function (value) {
var record = ComboBoxStore.getById(value);
if (record) {
value = record.data.text;
} else {
value = Ext.util.Format.date(value, "Y-m-d");
}
return value;
};
</script>
</head>
<body>
<form runat="server">
<ext:ResourceManager runat="server" />
<ext:Store
ID="ComboBoxStore"
runat="server"
OnRefreshData="ComboBoxStore_RefreshData"
AutoLoad="false">
<Proxy>
<ext:PageProxy />
</Proxy>
<Reader>
<ext:ArrayReader IDProperty="value">
<Fields>
<ext:RecordField Name="text" />
<ext:RecordField Name="value" />
</Fields>
</ext:ArrayReader>
</Reader>
</ext:Store>
<ext:GridPanel
ID="GridPanel1"
runat="server"
AutoHeight="true"
Width="310">
<Store>
<ext:Store runat="server">
<Reader>
<ext:ArrayReader>
<Fields>
<ext:RecordField Name="id" />
<ext:RecordField Name="editor" />
<ext:RecordField Name="test" />
</Fields>
</ext:ArrayReader>
</Reader>
</ext:Store>
</Store>
<ColumnModel runat="server">
<Columns>
<ext:Column Header="ID" DataIndex="id" />
<ext:Column Header="Editor" DataIndex="editor" />
<ext:Column Header="Test" DataIndex="test">
<Renderer Fn="testRenderer" />
</ext:Column>
</Columns>
</ColumnModel>
<Listeners>
<BeforeEdit Fn="setEditor" />
<Render Handler="this.getColumnModel().setEditable(2, true);" />
</Listeners>
</ext:GridPanel>
</form>
</body>
</html>