读书人

DataList 怎么获取EditTemplate中Text

发布时间: 2013-03-01 18:33:02 作者: rapoo

DataList 怎样获取EditTemplate中TextBox修改后的值??
具体请看代码,
.aspx代码:
<EditItemTemplate>
<td>
<asp:Label ID="Lbl_au_id" Text='<%#Eval("au_id")%>' runat="server"></asp:Label>
</td>
<td>
<asp:TextBox ID="Txt_au_lname" Text='<%#Eval("au_lname")%>' runat="server" ></asp:TextBox>
</td>
<td>
<asp:TextBox ID="Txt_au_fname" Text='<%#Eval("au_fname")%>' runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="Txt_phone" Text='<%#Eval("phone")%>' runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="Txt_address" Text='<%#Eval("address")%>' runat="server"></asp:TextBox>
</td>
<td>


<asp:LinkButton ID="LinkButton1" Text="更新" CommandName="Update" runat="server"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" Text="取消" CommandName="Cancel" runat="server"></asp:LinkButton>
</td>
<td>
<asp:LinkButton ID="LinkButton3" Text="删除" CommandName="Delete" runat="server"></asp:LinkButton>
</td>
</EditItemTemplate>
.aspx.cs代码
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
try
{
DataList ItemsList = (DataList)source;
if (e.Item.ItemType == ListItemType.EditItem)
{
TextBox Txt_au_lname = (TextBox)e.Item.FindControl("Txt_au_lname");
TextBox Txt_au_fname = (TextBox)e.Item.FindControl("Txt_au_fname");
TextBox Txt_phone = (TextBox)e.Item.FindControl("Txt_phone");
TextBox Txt_address = (TextBox)e.Item.FindControl("Txt_address");

string Id = ItemsList.DataKeys[e.Item.ItemIndex].ToString();
string a_ulname = Txt_au_lname.Text;
string a_ufname = Txt_au_fname.Text;
string a_phone = Txt_phone.Text;


string a_address = Txt_address.Text;
DatalistEdit da = new DatalistEdit();
int r = da.UpdateStorage(Id, a_ulname, a_ufname, a_phone, a_address);

}

}
catch (Exception s)
{
Response.Write(s.Message .ToString ());
}
}

为什么我的TextBox Txt_au_lname = (TextBox)e.Item.FindControl("Txt_au_lname");这段代码,获取不到改变后的TextBox中的值啊?
求助!!!
[解决办法]
关注中。。。
[解决办法]
if (e.Item.ItemType == ListItemType.EditItem)
{

这个去掉,然后断点跟一下
[解决办法]
for(int i=0;i<datalist.items.count;i++)
{
TextBox Txt_au_lname = datalist.Item[i].FindControl("Txt_au_lname") as TextBox
}
这样试试

[解决办法]
这台机子没环境楼主帮补到你了

调试下看看
[解决办法]
AutoPostBack 回发服务器 晕
[解决办法]

引用:
问题解决了,一样谢谢大家的关注

解决办法是在TextBox的代码框里加一个属性,AutoPostBack="True"
<asp:TextBox ID="Txt_phone" Text='<%#Eval("phone")%>' runat="server" AutoPostBack="True"></asp:TextBox>

然后加载Page_Load时,用if语句判断一下就行了
……


加载时机问题。

将下面代码封装给一个函数

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDataList();
}
}

public void BindDataList()
{
DatalistEdit da = new DatalistEdit();
DataList1.DataSource = da.SearchAll();
DataList1.DataBind();
}

protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
//......
BindDataList();
}


[解决办法]
引用:

问题解决了,一样谢谢大家的关注

解决办法是在TextBox的代码框里加一个属性,AutoPostBack="True"
<asp:TextBox ID="Txt_phone" Text='<%#Eval("phone")%>' runat="server" AutoPostBack="True"></asp:TextBox>

然后加载Page_Load时,用if语句判断一下就行了
……


那应该是你代码写的有问题


[解决办法]
DataList ItemsList = (DataList)source;
这是干啥的。
<asp:TextBox ID="Txt_phone" Text='<%#Eval("phone")%>' runat="server" AutoPostBack="True"></asp:TextBox>
居然还有AutoPostBack="True"

照这个写
[解决办法]

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DatalistEdit da = new DatalistEdit();
DataList1.DataSource = da.SearchAll();
DataList1.DataBind();
}
}

写在这里也行

protected void Page_PreRender(object sender, EventArgs e)
{
DatalistEdit da = new DatalistEdit();
DataList1.DataSource = da.SearchAll();
DataList1.DataBind();
}

读书人网 >asp.net

热点推荐