从适配器检索特定项目

本文关键字:项目 检索 适配器 | 更新日期: 2023-09-27 18:26:46

我在C#代码后面有一块代码,它填充了一个组合框:

ddlRole.Items.Clear();
ddlRole.SelectedValue = null;
DataTable DDLRoles = new DataTable();
using (SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["CLTDPL"].ConnectionString))
{
    //SqlDataAdapter adapter = new SqlDataAdapter("Select [Role_ID], [Role] from [MOS_Role] where [Function_ID] = " + FunID + " ORDER BY [Role] ASC", con2);
    SqlDataAdapter adapter = new SqlDataAdapter("Select [Role_ID], [Role], [BILLABLE_LBL] from [MOS_Role] where [Function_ID] = @FunID ORDER BY [Role] ASC", con2);
    adapter.SelectCommand.Parameters.AddWithValue("@FunID", Convert.ToInt32(ddlFunction.SelectedValue));
    adapter.Fill(DDLRoles);
    ddlRole.DataSource = DDLRoles;
    ddlRole.DataTextField = "Role";
    ddlRole.DataValueField = "Role_ID";
    ddlRole.DataBind();
}
ddlRole.Items.Insert(0, new ListItem("Select your role", "0"));

现在我被要求根据字段[BILLABLE_LBL]更改标签。因此,我需要检查该字段是NULL还是0,并在此基础上编写一个if/Else语句。然而,我不知道如何获得这个值。

我的意思是,我可以单独调用数据并使用读取器,但这不是最有效的方法。

从适配器检索特定项目

我希望我能正确理解这个问题,但你想根据组合框中选择的角色更改字段,并且不知道如何获得[BILLABLE_LBL]值(请随时纠正我)。

您可以通过Select()方法从DataTable中获取DataRow

DataRow[] row = DDLRole.Select("Role_ID = '" + selectedValueFromCombobox + "'");

既然你有了匹配的DataRow,你就可以读出想要的值:

string labelText = (row[0]["BILLABLE_LBL"] != DBNull.Value && row[0]["BILLABLE_LBL"] != 0) ? (string)row[0]["BILLABLE_LBL"] : "Empty Field";

此调用检查[BILLABLE_LBL]是否为Null或0(如您所需)。如果它不是Null或0,它将获取该值并将其保存为string labelText。否则,您可以设置一个替代文本,如"空字段"或仅设置";

我假设您的ComboBox上有一个Listener来检查值何时更改,或者有一个"提交按钮"或其他方法来检索选定的角色值。只需将代码添加到方法/监听器中即可获得所需的值,并将其设置为标签的文本。


EDIT:也许这正是您想要的,因为您不需要在数据表上使用Select()

DataRowView selectedRow = (ddlRole.SelectedItem as DataRowView);

要从行中检索值,只需使用:selectedRow["BILLABLE_LBL"]现在你可以检查Null和0,你就可以开始了。我不知道哪一种更有效(Select或…作为DataRowView),但无论哪种方式,你都能获得你的价值。

.SelectedItem as DataRowView的信用https://stackoverflow.com/a/9825085/5332988)