gpt4 book ai didi

c# - 下拉列表和数据阅读器

转载 作者:行者123 更新时间:2023-11-30 21:21:43 27 4
gpt4 key购买 nike

在尝试了互联网上列出的许多解决方案后,我现在很困惑。我有一个 C#/SQL web 应用程序,我只是试图将 ExecuteReader 命令绑定(bind)到 Dropdownlist,以便用户可以选择一个值。这是一个 XP 操作系统上的 VS2008 项目。

它的工作原理是在用户选择一个表后,我使用这个选择作为我的 Datamatch.aspx.cs 文件中方法的输入参数。然后这个 Datamatch.aspx.cs 文件从我的 ADONET.cs 类文件中调用一个方法。最后,此方法执行 SQL 过程以返回该表中的列列表。 (这些都是 Adventureworks DB 中的所有表)。我知道如果我在 SSMS 中执行此 SP,此方法会成功返回列列表。但是,我不确定如何判断它是否适用于 VS。

这应该很简单。我怎样才能做到这一点?这是我的一些代码。 T-sql 存储过程:

CREATE PROCEDURE [dbo].[getColumnNames]
@TableName VarChar(50) AS
BEGIN
SET NOCOUNT ON;
SELECT col.name 'COLUMN_NAME' FROM sysobjects obj
INNER JOIN syscolumns col ON obj.id = col.id
WHERE obj.name = @TableName
END

当我从 SSMS 执行以下操作时,它会给我所需的输出:exec getColumnNames 'AddressType'

目前 Datamatch.aspx.cs 文件中的代码是:

私有(private)无效 CreateDropDownLists(){ SqlDataReader dr2 = ADONET_methods.DisplayTableColumns(targettable);

int NumControls = targettable.Length;
DropDownList ddl = new DropDownList();
DataTable dt = new DataTable();

dt.Load(dr2);

ddl.DataValueField = "id";
ddl.DataTextField = "text";
ddl.DataSource = dt;
ddl.DataBind();

for (int counter = 0; counter < NumberOfControls; counter++)
{
ddl.ID = "DropDownListID " + (counter + 1).ToString();
btnSubmit.Style.Add("top", "auto");
btnSubmit.Style.Add("left", "auto");
btnSubmit.Style.Add("position", "absolute");

if (counter < 7)
{
ddl.Style["top"] = 100 * counter + 80 + "px";
ddl.Style["left"] = 250 + "px";
int bSubmitPosition = NumberOfControls * 100 + 80;
btnSubmit.Style.Add("top", System.Convert.ToString(bSubmitPosition) + "px");
}
else if (counter >= 7)
{
ddl.Style["top"] = 100 * counter - 620 + "px";
ddl.Style["left"] = 550 + "px";
int bSubmitPosition = NumberOfControls * 100 - 620;
btnSubmit.Style.Add("top", System.Convert.ToString(bSubmitPosition) + "px");
}
ddl.SelectedIndexChanged += new EventHandler(SelectedIndexChanged);
ddl_ht.Add(counter, ddl.SelectedValue);

pnlDisplayData.Controls.Add(ddl);
pnlDisplayData.Controls.Add(new LiteralControl("<br><br><br>"));
pnlDisplayData.Visible = true;
pnlDisplayData.FindControl(ddl.ID);
// dr.Close();
}

私有(private)无效 CreateLabels(){ for (int counter = 0; counter < NumberOfControls; counter++) { 标签 lbl = new Label(); lbl.ID = "标签"+ counter.ToString(); lbl.Text = headers[计数器]; lbl.Style["位置"] = "绝对"; 如果(计数器 < 7) { lbl.Style["top"] = 100 * counter + 50 + "px"; lbl.Style["left"] = 250 + "px"; } 否则如果(计数器> = 7) { lbl.Style["top"] = (100 * counter) - 650 + "px"; lbl.Style["left"] = 550 + "px";

    pnlDisplayData.Controls.Add(lbl);
pnlDisplayData.Controls.Add(new LiteralControl("<br><br><br>"));
}

其中 ADONET_methods.DisplayTableColumns(targettable) 是:

public static SqlDataReader DisplayTableColumns(string tt)
{
SqlDataReader dr = null;
string TableName = tt;
string connString = "Server=(local);Database=AdventureWorks;Integrated Security = SSPI";
string errorMsg;
SqlConnection conn2 = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand("getColumnNames"); //conn2.CreateCommand();

try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn2;
SqlParameter parm = new SqlParameter("@TableName", SqlDbType.VarChar);
parm.Value = "Person." + TableName.Trim();
parm.Direction = ParameterDirection.Input;
cmd.Parameters.Add(parm);
conn2.Open();
dr = cmd.ExecuteReader();

}
catch (Exception ex)
{
errorMsg = ex.Message;
}
return dr;
}

上面的 CreateLabels 方法正确地显示了标签。但是 CreateDropDownLists 方法只显示了一个下拉列表,里面什么也没有。换句话说,它是不可选择的。那么我如何验证数据读取器是否返回所有 4 列并检查它们的值呢?我能够从数据读取器“COLUMN_NAME”中找到,但我不知道要搜索哪些属性来验证列名。

最佳答案

看起来您实际上并未在此代码中的任何位置绑定(bind)下拉列表。你需要做这样的事情:

ddl.DataTextField = "COLUMN_NAME";
ddl.DataValueField = "COLUMN_NAME";
ddl.DataSource = dr.ExecuteReader();
ddl.DataBind();

或者,您可以使用 SqlDataSource 控件在页面标记中完成这一切。

  <asp:SqlDataSource
id="SqlDataSource1"
runat="server"
DataSourceMode="DataSet"
ConnectionString="myConnString"
SelectCommand="myStoredProcedure"
>
</asp:SqlDataSource>

<asp:MyDropDownList id="ddl" runat="server" DataSource="SqlDataSource1"
DataTextField="COLUMN_NAME" DataValueField="COLUMN_NAME" />

关于c# - 下拉列表和数据阅读器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604117/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com