我对文本框或大脑有些麻烦。我无法理解无法使用的文本框的原因。我的意思是,我有3列的列表视图:"名称","代码","绑定"。 通过单击" Name",第一列和第二列变为可编辑。在我编辑之后,我按下按钮"保存" ...并且没有任何事情发生。无法理解这么简单的事情。为什么它不起作用? 抱歉错误,我第一次来这里
<asp:Content ID="ContentMain" ContentPlaceHolderID="centerContent" runat="server">
<asp:Panel ID="i_ListContainer" runat="server" HorizontalAlign="Center">
<asp:ListView ID="CpzListView" runat="server" DataKeyNames="id" InsertItemPosition="FirstItem"
OnItemCreated="i_UserLV_ItemCreated" OnItemInserted="i_UserLV_ItemInserted" OnItemEditing="i_UserLV_ItemEditing"
OnItemInserting="i_UserLV_ItemInserting" OnItemUpdated="i_UserLV_ItemUpdated"
OnItemUpdating="i_UserLV_ItemUpdating">
<LayoutTemplate>
<table cellpadding="0" cellspacing="0" class="mGrid">
<th style="width: 150px">
Name
</th>
<th style="width: 150px">
Code
</th>
<th style="width: 50px">
Binding
</th>
</thead>
<tbody>
<asp:PlaceHolder runat="server" ID="itemPlaceholder" />
</tbody>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:LinkButton ID="i_viewEditLB" runat="server" CommandName="Edit" Text='<%#Bind("cpzname") %>' />
</td>
<td>
<asp:Label ID="i_viewUserFioLabel" runat="server" Text='<%#Bind("code") %>' />
</td>
<td style="text-align: center; width: 80px">
<a href='<%# GetUrl(Eval("cpzname"), Eval("code"))%>'>Bindindg</a>
</td>
</tr>
</ItemTemplate>
<InsertItemTemplate>
</InsertItemTemplate>
<EditItemTemplate>
<tr>
<td>
<asp:TextBox ID="tbCpzName" runat="server" Text='<%# Bind("cpzname") %>'></asp:TextBox>
</td>
<td>
<asp:TextBox ID="tbCpzCode" runat="server" Text='<%# Bind("code") %>'></asp:TextBox>
</td>
<td>
<asp:LinkButton ID="lbSave" runat="server" CommandName="Update" Text="Save" />
</td>
</tr>
</EditItemTemplate>
</asp:ListView>
</asp:Panel>
</asp:Content>
以下是c#代码,希望您能帮助我。
namespace WebApplication2.MemberPages
{
protected void Page_Load(object sender, EventArgs e)
{
UpdateBinding();
}
private void UpdateBinding()
{
DataTable dt = AOneConnectDB.ExecuteQuery("select id, cpzname, code from cpz");
if (dt == null) return;
CpzListView.DataSource = dt;
CpzListView.DataBind();
}
protected void i_UserLV_ItemCanceling(object sender, ListViewCancelEventArgs e)
{
CpzListView.EditIndex = -1;
UpdateBinding();
}
private string GetValue(users key)
{
return CpzListView.Items.Count > 0 ? CpzListView.SelectedDataKey[key.ToString()].ToString() : string.Empty;
}
protected void i_UserLV_ItemEditing(object sender, ListViewEditEventArgs e)
{
CpzListView.EditIndex = e.NewEditIndex;
CpzListView.SelectedIndex = e.NewEditIndex;
UpdateBinding();
}
protected void i_UserLV_ItemInserted(object sender, ListViewInsertedEventArgs e)
{
// must empty
}
private string ControlValue(string controlName, ListViewItem item)
{
object c = item.FindControl(controlName);
if (c is TextBox) return (c as TextBox).Text;
if (c is CheckBox) return (c as CheckBox).Checked ? ADataBase.TRUE : ADataBase.FALSE;
if (c is DropDownList) return (c as DropDownList).SelectedValue;
return null;
}
protected void i_UserLV_ItemUpdated(object sender, ListViewUpdatedEventArgs e)
{
// must empty
}
protected void i_UserLV_ItemUpdating(object sender, ListViewUpdateEventArgs e)
{
if (CpzListView.SelectedDataKey != null && !string.IsNullOrEmpty(CpzListView.SelectedDataKey["id"].ToString()))
{
var cpzId = CpzListView.SelectedDataKey["id"];
var cpzName = ControlValue("tbCpzName", CpzListView.EditItem);
var cpzCode = ControlValue("tbCpzCode", CpzListView.EditItem);
string updateCpzQuery = string.Format(@"update cpz c
set c.cpzname = {0}
and c.code = {1}
where c.id = {2}", cpzName, cpzCode, cpzId);
if (AOneConnectDB.ExecuteNonQuery(updateCpzQuery))
{
AGUI.ShowMessage(MessageType.Success, "CPZ Modified.");
}
}
}
protected void i_UserLV_ItemCreated(object sender, ListViewItemEventArgs e)
{
// must empty
}
}
}
答案 0 :(得分:0)
您的代码没有错。你想念小事。
要始终实际获取数据,您需要设置 EnableViewState =“false”。最重要的是,仅针对特定输入进行设置是不够的。只有在我设置了这样的页面级视图状态后,这才适用于我。
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master"
AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebApplication8._Default"
EnableViewState="false" %>
答案 1 :(得分:0)
您应该像这样编写页面加载方法代码:
protected void Page_Load(object sender, EventArgs e)
{
if(IsPostBack)
return;
UpdateBinding();
}
在你的代码中,编辑的数据会因编辑代码而失败,因为当你单击“保存”按钮时,第一页将执行加载并将列表视图与旧数据绑定(UpdateBinding),然后执行i_UserLV_ItemUpdating。断点将帮助你动摇,以及它是如何运作的。