web中datagrid的TemplateColumn中等难度问题——〉找了一下以前的帖子没发现类似的问题

心雨楼 2003-09-04 06:23:55
我在我的datagrid中加入一列TemplateColumn
然后
在ItemTemplate中加入一个Label ID = lb 绑定到数据库的一列
在EditItemTemplate中加入一个DropDownList 绑定到另外一个数据库的一列

没有什么技术问题

就是点编辑的时候,当然,也是很自然的事情了,这个摸板列的这一行就显示
DropDownList 的内容,那别的行还是显示Label重磅定大数据空中那一列的值;
这些都没什么疑问。

现在就是编辑完以后点确定,我取得DropDownList中的内容,然后去跟别的行中的Label 的值进行比较。但是问题就出现了,因为是在编辑状态下,所以无法用
(Label)DataGrid1.Items[i].Cells[2].FindControl("lb").Text.ToString();
这样是取不到值的。
这样DataGrid1.Items[i].Cells[2].Text.ToString();也取不到值的.

不知道还有什么办法
...全文
46 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2003-09-05
  • 打赏
  • 举报
回复
>>>然后去跟别的行中的Label 的值进行比较。但是问题就出现了,因为是在编辑状态下,所以无法用

are you sure?? try


<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat="server">

protected void Page_Load(Object Src, EventArgs E)
{
if (!IsPostBack)
BindGrid();
}

public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();

}

public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{

MyDataGrid.EditItemIndex = -1;
BindGrid();
}

public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox tb = (TextBox)e.Item.FindControl("TextBox1");

Response.Write("****in Update:" + tb.Text + "****");

foreach (DataGridItem dgi in MyDataGrid.Items)
{
if (e.Item != dgi)
{
Label l = (Label)dgi.FindControl("Label1");
Response.Write("****other columns:" + l.Text + "****");
}
}

MyDataGrid.EditItemIndex = -1;
BindGrid();
}

public void BindGrid()
{
SqlDataAdapter da = new SqlDataAdapter("select * from authors", "server=(local);database=pubs;uid=sa;pwd=;");

DataTable dt = new DataTable();
da.Fill(dt);

MyDataGrid.DataSource=dt.DefaultView;
MyDataGrid.DataBind();

}

</script>
<body>
<form runat="server">

<ASP:DataGrid id="MyDataGrid" runat="server"
OnEditCommand="MyDataGrid_Edit"
OnCancelCommand="MyDataGrid_Cancel"
OnUpdateCommand="MyDataGrid_Update"
DataKeyField="au_id">

<Columns>
<asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" ItemStyle-Wrap="false"/>

<ASP:TEMPLATECOLUMN headertext="Unit">
<ITEMTEMPLATE>
<asp:Label id="Label1" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "au_lname") %>'>
</ASP:LABEL>
</ITEMTEMPLATE>
<EDITITEMTEMPLATE>
<asp:TextBox id="TextBox1" runat="server" Text='<%#
DataBinder.Eval(Container.DataItem, "au_lname") %>'>
</ASP:TEXTBOX>
<ASP:REQUIREDFIELDVALIDATOR id="RequiredFieldValidator1"
runat="server" controltovalidate="TextBox1"
errormessage="Required*****"></ASP:REQUIREDFIELDVALIDATOR>

<asp:DropdownList ID="progress" runat="server" Width="40">
<asp:ListItem Value="80">80</asp:ListItem>
<asp:ListItem Value="90">90</asp:ListItem>
<asp:ListItem Value="100">100</asp:ListItem>
</asp:DropdownList>
</EDITITEMTEMPLATE>
</ASP:TEMPLATECOLUMN>
</Columns>
</ASP:DataGrid>
</form>
</body>
saucer 2003-09-05
  • 打赏
  • 举报
回复
>>>然后去跟别的行中的Label 的值进行比较。但是问题就出现了,因为是在编辑状态下,所以无法用

are you sure?? try


<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat="server">

protected void Page_Load(Object Src, EventArgs E)
{
if (!IsPostBack)
BindGrid();
}

public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();

}

public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{

MyDataGrid.EditItemIndex = -1;
BindGrid();
}

public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
TextBox tb = (TextBox)e.Item.FindControl("TextBox1");

Response.Write("****in Update:" + tb.Text + "****");

foreach (DataGridItem dgi in MyDataGrid.Items)
{
if (e.Item != dgi)
{
Label l = (Label)dgi.FindControl("Label1");
Response.Write("****other columns:" + l.Text + "****");
}
}

MyDataGrid.EditItemIndex = -1;
BindGrid();
}

public void BindGrid()
{
SqlDataAdapter da = new SqlDataAdapter("select * from authors", "server=(local);database=pubs;uid=sa;pwd=;");

DataTable dt = new DataTable();
da.Fill(dt);

MyDataGrid.DataSource=dt.DefaultView;
MyDataGrid.DataBind();

}

</script>
<body>
<form runat="server">

<ASP:DataGrid id="MyDataGrid" runat="server"
OnEditCommand="MyDataGrid_Edit"
OnCancelCommand="MyDataGrid_Cancel"
OnUpdateCommand="MyDataGrid_Update"
DataKeyField="au_id">

<Columns>
<asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update" ItemStyle-Wrap="false"/>

<ASP:TEMPLATECOLUMN headertext="Unit">
<ITEMTEMPLATE>
<asp:Label id="Label1" runat="server"
Text='<%#DataBinder.Eval(Container.DataItem, "au_lname") %>'>
</ASP:LABEL>
</ITEMTEMPLATE>
<EDITITEMTEMPLATE>
<asp:TextBox id="TextBox1" runat="server" Text='<%#
DataBinder.Eval(Container.DataItem, "au_lname") %>'>
</ASP:TEXTBOX>
<ASP:REQUIREDFIELDVALIDATOR id="RequiredFieldValidator1"
runat="server" controltovalidate="TextBox1"
errormessage="Required*****"></ASP:REQUIREDFIELDVALIDATOR>

<asp:DropdownList ID="progress" runat="server" Width="40">
<asp:ListItem Value="80">80</asp:ListItem>
<asp:ListItem Value="90">90</asp:ListItem>
<asp:ListItem Value="100">100</asp:ListItem>
</asp:DropdownList>
</EDITITEMTEMPLATE>
</ASP:TEMPLATECOLUMN>
</Columns>
</ASP:DataGrid>
</form>
</body>
心雨楼 2003-09-05
  • 打赏
  • 举报
回复
难道此问题真的无解决问题的方法吗?

help ...
心雨楼 2003-09-05
  • 打赏
  • 举报
回复
To zjjszw(阿丸)
我用的是摸板列!!!!!!!
你说的似乎是取得编辑的那一行的输入值,而我想要的是摸板列的所有行的值,除了正在编辑的这一行。
jeall 2003-09-05
  • 打赏
  • 举报
回复
上面的文章位置给错了!
http://expert.csdn.net/Expert/topic/2227/2227242.xml?temp=.1263239
jeall 2003-09-05
  • 打赏
  • 举报
回复
我能问你的<asp:DropdownList ID="progress" runat="server" Width="40">中的progress在修改的时候是怎么和数据库中的内容进行绑定的吗?并且,怎样使DropdownList选中progress内容所在项!急!正好要用到!
http://expert.csdn.net/Expert/topic/2227/2227242.xml?temp=.1263239
wymln 2003-09-05
  • 打赏
  • 举报
回复
你试一下上面的方法
zjjszw 2003-09-04
  • 打赏
  • 举报
回复
這是我以前寫的一段修改數據的代碼,希望對你有幫助:
===================================================================
aspx中(DataGrid的修改列)﹕
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="確定" HeaderText="編輯" CancelText="取消" EditText="編輯">
</asp:EditCommandColumn>
===================================================================
aspx.cs中:
private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex=e.Item.ItemIndex;
DataBind();
}

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string ordno=((TextBox)e.Item.FindControl("ddhm")).Text;
string supno=((TextBox)e.Item.FindControl("Textbox9")).Text;
string orddate=((TextBox)e.Item.FindControl("Textbox10")).Text;
string delsta=((TextBox)e.Item.FindControl("Textbox11")).Text;
string delend=((TextBox)e.Item.FindControl("Textbox12")).Text;
string curno=((TextBox)e.Item.FindControl("Textbox13")).Text;
string paymode=((TextBox)e.Item.FindControl("Textbox14")).Text;

conn.comm("update TableManager set dbName='"+ordno+"',tbName='"+supno+"',useSystem='"+orddate+"',author='"+delsta+"',[rows]='"+delend+"',[date]='"+Session["udate"]+"',memo='"+paymode+"' where rowguid='"+Session["bb"]+"'");
DataGrid1.EditItemIndex=-1;
conn.Gridbind("select * from TableManager",DataGrid1);
}
======================================================================
conn.comm()和comm.Gridbind()為我自己寫的方法。
在DataGrid的屬性事件中UpdateCommand=DataGrid1_UpdateCommand
心雨楼 2003-09-04
  • 打赏
  • 举报
回复
是在UpdateCommand下取的,还是取不到的,因为在编辑状态下点确定的时候引发UpdateCommand事件,所以还是取不到。

不知道还有什么办法啊?

救命啊!!!!
zjjszw 2003-09-04
  • 打赏
  • 举报
回复
在DataGrid的UpdateCommand事件中可以取到模板中的label的數值
在EditCommand事件下可能取不到
心雨楼 2003-09-04
  • 打赏
  • 举报
回复
怎么都没有人呢?
心雨楼 2003-09-04
  • 打赏
  • 举报
回复
那我要有一千条记录、或者更多,这样会不好。
而且可能大量点编辑就会很不好。
possible_Y 2003-09-04
  • 打赏
  • 举报
回复
点编辑的时候将lb的text先保存到一个变量中
心雨楼 2003-09-04
  • 打赏
  • 举报
回复
这样是取不到的,而且我不止取一个值,我要取整列的值。

关键是,在编辑状态下事取不到FindControl("lb")的。这样做是不可能的。

不知道除了FindControl还有什么方法呢?
zjjszw 2003-09-04
  • 打赏
  • 举报
回复
你是寫在哪個事件里面的?試試看
string ordno=((Label)e.Item.FindControl("lb")).Text;

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧