gpt4 book ai didi

c# - Control.Enabled 是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:23 26 4
gpt4 key购买 nike

我花了几天时间查看各种资源,但越来越困惑。我在 .aspx 文件中有几个控件:一个编辑按钮、一个年份下拉列表和四个带有文本框和下拉列表的 GridView 。 GridView 中的文本框和下拉列表开始禁用。当用户单击编辑按钮时,他们应该启用。这第一次有效,但他们不会再次禁用。这是相关代码:

private void toggleEditMode()
{
editBtn.CssClass = editBtn.Attributes["mode"].ToString() == "edit" ? "btn btn-success" : "btn btn-primary";
editBtn.Text = editBtn.Attributes["mode"].ToString() == "edit" ? "<span class='glyphicon glyphicon-floppy-disk'></span>&nbsp;Save" : "<span class='glyphicon glyphicon-edit'></span>&nbsp;Edit";
editBtn.Attributes["mode"] = editBtn.Attributes["mode"].ToString() == "edit" ? "save" : "edit";

selectYear.Enabled = !selectYear.Enabled;
foreach (GridView gv in panels)
{
foreach (GridViewRow gvr in gv.Rows)
{
TextBox name = (TextBox)gvr.FindControl("nameTB");
DropDownList rating = (DropDownList)gvr.FindControl("ratingDDL");

name.Enabled = !name.Enabled;
rating.Enabled = !rating.
}
}
}

编辑按钮正确变为保存按钮,年份下拉列表正确切换,但 gridview 中的文本框和下拉列表不会禁用。在调试过程中,我发现在该方法的开头,每个文本框和DDL 的Enabled 属性都是false。

文本框和 DDL 全部开始禁用,在按钮单击时启用,然后不会禁用,即使按钮和年份 DDL 正确切换也是如此。

我的问题是:Enabled 属性究竟是如何工作的?非常感谢任何帮助。

编辑:这是标记:

<asp:LinkButton ID="editBtn" runat="server" ClientIDMode="Static" OnClick="ToggleEditMode" CssClass="btn btn-primary" mode="edit">
<span class="glyphicon glyphicon-edit"></span>&nbsp;Edit
</asp:LinkButton>

<div class="form-inline" role="form">
<fieldset>
<div class="form-group">
<label for="selectYear">Year:&nbsp;</label>
<asp:DropDownList ID="selectYear" runat="server" CssClass="form-control" AutoPostBack="true" ClientIDMode="Static"></asp:DropDownList>
</div>
</fieldset>
</div>

这是 GridView :

<asp:GridView ID="jrSchools1a2aAdmin" runat="server" AutoGenerateColumns="false" GridLines="None" ClientIDMode="Static" OnRowCreated="BindRatings" CssClass="table table-striped table-bordered">
<Columns>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:TextBox ID="nameTB" runat="server" Text='<%# Eval("name") %>' ClientIDMode="Static" schoolID='<%# Eval("schoolID") %>' Enabled="false" CssClass="form-control"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Rating">
<ItemTemplate>
<asp:DropDownList ID="ratingDDL" runat="server" SelectedValue='<%# Eval("rating") %>' ClientIDMode="Static" Enabled="false" CssClass="form-control"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="students" HeaderText="Students" />
<asp:BoundField DataField="7_1" HeaderText="7-I" />
<asp:BoundField DataField="7_2" HeaderText="7-II" />
<asp:BoundField DataField="8_1" HeaderText="8-I" />
<asp:BoundField DataField="8_2" HeaderText="8-II" />
<asp:BoundField DataField="open" HeaderText="Open" />
<asp:BoundField DataField="score" HeaderText="Score" />
</Columns>
</asp:GridView>

ToggleEditMode 检查是否应保存,如果应保存则运行 SQL 查询,然后调用 toggleEditMode()

编辑 2:这里是调用 toggleEditMode() 的地方。对困惑感到抱歉。它不会在其他任何地方调用。

protected void ToggleEditMode(object sender, EventArgs e)
{
if (editBtn.Attributes["mode"].ToString() == "save")
{
StringBuilder query = new StringBuilder();
List<SQLParameter> parameters = new List<SQLParameter>();

//Determine the year
int year;
int.TryParse(selectYear.SelectedItem.Value, out year);
parameters.Add(new SQLParameter("@year", year));

// Use a counter so we can enumerate parameter names
int i = 0;
foreach (GridView gv in panels)
{
foreach (GridViewRow gvr in gv.Rows)
{
TextBox name = (TextBox)gvr.FindControl("nameTB");
DropDownList rating = (DropDownList)gvr.FindControl("ratingDDL");

name.CssClass = "form-control green";

//SQL statements here

parameters.Add(new SQLParameter(String.Format("@name{0}", i), name.Text));
parameters.Add(new SQLParameter(String.Format("@schoolID{0}", i), name.Attributes["schoolID"].ToString()));
parameters.Add(new SQLParameter(String.Format("@rating{0}", i), rating.SelectedValue));

i++;
}
}

SqlConn.doQuery(query.ToString(), parameters);

//populateTables();
}
toggleEditMode();
}

最佳答案

就像评论中提到的@mjw,我在标记中设置了Enabled='false'。由于 page life cycle ,控件始终呈现为 Enabled='false'。如果可以根据条件启用/禁用控件,最好在 Page_Load 函数中处理。但是,ASP.NET 具有内置于 GridView 控件中的编辑功能,这些功能应该优于 AJAX 提交,因为 ASP.NET 具有内置的安全优势。以下是一些帮助您入门的链接:

Making a column editable in an ASP.net GridView

https://learn.microsoft.com/en-us/previous-versions/dotnet/articles/ms972948(v=msdn.10)

关于c# - Control.Enabled 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51194225/

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