gpt4 book ai didi

c# - 更改 SqlDataReader 值的面板可见性并从 Eval 字符串 C# 中删除前两个字符

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

目前我有两个问题。
问题 1
我正在尝试更改两个 Panels 的可见性基于什么值 reader
reader["Maskine_Type"].ToString() 获取正如您在下面的代码隐藏中看到的那样。
因为面板在中继器内,所以我还使用:

Panel PanelTilbud = (Panel)Page.FindControl("PanelTilbud");

你又可以在下面看到。
然而,当我运行代码时,它给了我一个
Object reference not set to an instance of an object
PanelTilbud.Visible = true;我想是因为它仍然找不到面板。我用中继器外部的面板进行了测试,它工作正常。
我还尝试制作 Repeater OnItemDataBound="Repeater1_ItemDataBound"
并更改为 Panel PanelTilbud = (Panel)e.Item.FindControl("PanelTilbud");
然而我得到了错误

Insufficient stack to continue executing the program safely

问题2.
在其中一个面板中,我运行这段代码

<%# (Eval("Maskine_Tilbud").ToString().Substring(Eval("Maskine_Tilbud").ToString().Length - 2))%>


为了从 Eval("Maskine_Tilbud") 中删除字符串中的前两个字符这工作正常,但是数据库中的大多数记录在 Maskine_Tilbud 中都会有一个空值。如果它为空,我得到错误 StartIndex cannot be less than zero这是有道理的,但我不知道如何从 Eval("Maskine_Tilbud") 中删除前两个字符

.aspx 标记

<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>

<asp:Panel ID="PanelTilbud" runat="server" Visible="false">
<hr />
<h4 class="radfont text-center">Tilbud! -<%# (Eval("Maskine_Tilbud").ToString().Substring(Eval("Maskine_Tilbud").ToString().Length - 2))%>% pr dag!</h4>
</asp:Panel>

<asp:Panel ID="PanelNormal" runat="server">
<hr />
<h4 class="text-center orangeFont"><%#Eval("Maskine_pris") %><span class="hvidfont">,- pr dag inkl moms</span>
<span class="orangeFont">(<%#Eval("Maskine_Upris") %>,- ekskl)</span>
</h4>
<hr />
</asp:Panel>

</ItemTemplate>
</asp:Repeater>

我的代码隐藏 - 在 Page_Load 中

SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["DatabaseConnectionString1"].ToString();

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT top 1 * FROM [Maskiner] INNER JOIN Maskine_kategori ON Maskiner.Maskine_Kategorinavn = Maskine_kategori.Maskine_kategori_id WHERE ([Maskine_id] = @Maskine_id)";

cmd.Parameters.Add("@Maskine_id", SqlDbType.Int).Value = Request.QueryString["Maskine_id"];

conn.Open();
SqlDataReader reader = cmd.ExecuteReader();

Panel PanelTilbud = (Panel)Page.FindControl("PanelTilbud");
Panel PanelNormal = (Panel)Page.FindControl("PanelNormal");

if (reader.Read())
{
if (reader["Maskine_Type"].ToString() == "Tilbud")
{
PanelTilbud.Visible = true;
PanelNormal.Visible = false;
}
if (reader["Maskine_Type"].ToString() == "Normal")
{
PanelTilbud.Visible = false;
PanelNormal.Visible = true;
}
}

conn.Close();

DataTable select_favorit_db = new DataTable();
SqlDataAdapter dt = new SqlDataAdapter(cmd);
dt.Fill(select_favorit_db);
Repeater1.DataSource = select_favorit_db;
Repeater1.DataBind();

我希望你能理解我的问题。

最佳答案

来晚了。只是想我应该补充一点,你可以在你的页面中有方法并在你的数据绑定(bind)表达式中使用它们。示例:

ASPX:

<form id="form1" runat="server">
<asp:Repeater ID="rep" runat="server">
<ItemTemplate>
<asp:Label ID="lab" runat="server"
Text='<%# Trim2Chars(Eval("test")) %>'></asp:Label>
</ItemTemplate>
</asp:Repeater>
</form>

代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{
//create fake data for demo and bind to repeater
var data = Enumerable.Range(0, 10).Select(i => new { test = "foo " + i });
rep.DataSource = data;
rep.DataBind();
}
public string Trim2Chars(object input)
{
string inputString = input as string;
if (inputString == null)
return "";
if (inputString.Length < 2)
return inputString;
return inputString.Substring(2);
}

这样,您可以使 ASPX 文件更简洁一些,并在后面的代码中评估更复杂的数据绑定(bind)表达式。

关于c# - 更改 SqlDataReader 值的面板可见性并从 Eval 字符串 C# 中删除前两个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893522/

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