从适配器中检索特定项目?

Retrieve a specific item from an adapter?

我在 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 语句。但是,我不知道如何获得该值。

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

我希望我能正确理解问题,但是您想根据从组合框中选择的角色更改字段并且不知道如何获取 [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。否则你可以设置一个替代文本,比如 "Empty Field" 或者只是 "";

我假设您在 ComboBox 上有一个 Listener 来检查值何时更改,或者有一个 "Commit Button" 或其他一些方法来检索所选的 Role 值。只需将代码添加到您的 method/listener 以获得所需的值并将其设置为标签的文本。


编辑:也许这更符合您的要求,因为您不需要在数据表上使用 Select()

DataRowView selectedRow = (ddlRole.SelectedItem as DataRowView);

要从行中检索值,您可以使用:selectedRow["BILLABLE_LBL"] 现在您可以检查 Null 和 0,一切顺利。 我不知道哪个更有效(Select 或 ... 作为 DataRowView),但无论哪种方式你都能得到你的价值。

.SelectedItem as DataRowView 到 的功劳)