c# - 更改 SqlDataReader 值上的面板可见性并修剪 Eval 字符串 C# 中的前两个字符

标签 c# asp.net webforms

目前我有两个问题。
问题 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;我认为是因为它仍然找不到面板。我用中继器外部的面板进行了测试,效果很好。
我还尝试制作中继器 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/

相关文章:

c# - C# 中的字符串清理

c# - ObservableCollection<T>.Add 是如何工作的?

asp.net - 为什么 Request.Cookies 在 foreach 循环中返回字符串而不是 HttpCookie 对象?

c# - 映射无法正常工作 (ASP.NET)

c# - 如何在拥有默认方法的同时仍然能够覆盖它?

c# 如何定义包含不同类型的字典?

html - 从导航栏中删除额外的填充

c# - WebForms 中的键盘快捷键

c# - 从csv导入到asp.net中的mysql数据库中删除双引号("")

jQuery 处理动态添加元素上的事件