ユーザー入力で正しくフィルタリングできる ASPxComboBox があります。選択したアイテムをデータベースに保存したいと思います。しかし、SelectedItem を取得しようとすると、null になります。
ASP
<dxe:ASPxComboBox ID="cboInstructor" runat="server" Width="100%"
EnableCallbackMode="True" CallbackPageSize="10"
IncrementalFilteringMode="Contains" ValueType="System.Int32" ValueField="employee_id"
OnItemsRequestedByFilterCondition="cboInstructor_OnItemsRequestedByFilterCondition_SQL"
OnItemRequestedByValue="cboInstructor_OnItemRequestedByValue_SQL" TextFormatString="{0} {1}"
DropDownStyle="DropDown"
>
<Columns>
<dxe:ListBoxColumn FieldName="display_forename" Caption="Forename" />
<dxe:ListBoxColumn FieldName="display_surname" Caption="Surname" />
</Columns>
</dxe:ASPxComboBox>
<asp:SqlDataSource ID="SqlDataSourceInstruct" runat="server" ConnectionString="Server=testserver;User ID=root;Password=password;Persist Security Info=True;Database=central" ProviderName="MySql.Data.MySqlClient" SelectCommand="GetUser" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:Parameter Name="filter" Type="String" />
<asp:Parameter Name="startIndex" Type="Int32" />
<asp:Parameter Name="endIndex" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSourceInstructPopulate" runat="server" ConnectionString="Server=testserver;User ID=root;Password=password;Persist Security Info=True;Database=central" ProviderName="MySql.Data.MySqlClient" SelectCommand="GetUser" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
<asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" />
CS
protected void Page_Load(object sender, EventArgs e)
{
}
protected void cboInstructor_OnItemsRequestedByFilterCondition_SQL(object source, ListEditItemsRequestedByFilterConditionEventArgs e)
{
ASPxComboBox comboBox = (ASPxComboBox)source;
SqlDataSourceInstruct.SelectParameters.Clear();
SqlDataSourceInstruct.SelectParameters.Add("filter", TypeCode.String, string.Format("%{0}%", e.Filter));
SqlDataSourceInstruct.SelectParameters.Add("startIndex", TypeCode.Int32, (e.BeginIndex + 1).ToString());
SqlDataSourceInstruct.SelectParameters.Add("endIndex", TypeCode.Int32, (e.EndIndex + 1).ToString());
comboBox.DataSource = SqlDataSourceInstruct;
comboBox.DataBind();
}
protected void cboInstructor_OnItemRequestedByValue_SQL(object source, ListEditItemRequestedByValueEventArgs e)
{
long value = 0;
if (e.Value == null)
return;
if (!Int64.TryParse(e.Value.ToString(), out value))
return;
ASPxComboBox comboBox = (ASPxComboBox)source;
SqlDataSourceInstructPopulate.SelectCommand = @"SELECT employee_id, display_surname, display_forename FROM user_record WHERE employee_id = @ID ORDER BY display_forename";
SqlDataSourceInstructPopulate.SelectCommandType = System.Web.UI.WebControls.SqlDataSourceCommandType.Text;
SqlDataSourceInstructPopulate.SelectParameters.Clear();
SqlDataSourceInstructPopulate.SelectParameters.Add("ID", TypeCode.Int64, e.Value.ToString());
comboBox.DataSource = SqlDataSourceInstructPopulate;
comboBox.DataBind();
comboBox.ValueField = "employee_id";
}
protected void btnTest_Click(object sender, EventArgs e)
{
int iTest = (int)cboInstructor.SelectedItem.GetValue("employee_id");
}
行で:
int iTest = (int)cboInstructor.SelectedItem.GetValue("employee_id");
cboInstructor.SelectedItem
無効です。誰でも理由がわかりますか?