web中datagrid的TemplateColumn中等难度问题——〉找了一下以前的帖子没发现类似的问题
我在我的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();也取不到值的.
不知道还有什么办法
问题点数:100、回复次数:14Top
1 楼zjjszw(【湘:張家界】穿裤叉的蚊子【抵制日貨】)回复于 2003-09-04 18:38:36 得分 5
你是寫在哪個事件里面的?試試看
string ordno=((Label)e.Item.FindControl("lb")).Text;
Top
2 楼xinyulou(心雨楼)回复于 2003-09-04 18:55:14 得分 0
这样是取不到的,而且我不止取一个值,我要取整列的值。
关键是,在编辑状态下事取不到FindControl("lb")的。这样做是不可能的。
不知道除了FindControl还有什么方法呢?Top
3 楼possible_Y(████本人签名需要刮开,方可看到 )回复于 2003-09-04 19:01:32 得分 5
点编辑的时候将lb的text先保存到一个变量中Top
4 楼xinyulou(心雨楼)回复于 2003-09-04 19:09:23 得分 0
那我要有一千条记录、或者更多,这样会不好。
而且可能大量点编辑就会很不好。
Top
5 楼xinyulou(心雨楼)回复于 2003-09-04 20:11:41 得分 0
怎么都没有人呢?Top
6 楼zjjszw(【湘:張家界】穿裤叉的蚊子【抵制日貨】)回复于 2003-09-04 20:21:38 得分 5
在DataGrid的UpdateCommand事件中可以取到模板中的label的數值
在EditCommand事件下可能取不到Top
7 楼xinyulou(心雨楼)回复于 2003-09-04 21:29:20 得分 0
是在UpdateCommand下取的,还是取不到的,因为在编辑状态下点确定的时候引发UpdateCommand事件,所以还是取不到。
不知道还有什么办法啊?
救命啊!!!!Top
8 楼zjjszw(【湘:張家界】穿裤叉的蚊子【抵制日貨】)回复于 2003-09-04 21:51:15 得分 10
這是我以前寫的一段修改數據的代碼,希望對你有幫助:
===================================================================
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_UpdateCommandTop
9 楼xinyulou(心雨楼)回复于 2003-09-05 08:35:23 得分 0
To zjjszw(阿丸)
我用的是摸板列!!!!!!!
你说的似乎是取得编辑的那一行的输入值,而我想要的是摸板列的所有行的值,除了正在编辑的这一行。Top
10 楼xinyulou(心雨楼)回复于 2003-09-05 12:40:23 得分 0
难道此问题真的无解决问题的方法吗?
help ...Top
11 楼saucer(思归)回复于 2003-09-05 12:54:36 得分 65
>>>然后去跟别的行中的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>
Top
12 楼saucer(思归)回复于 2003-09-05 12:55:00 得分 0
>>>然后去跟别的行中的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>
Top
13 楼wymln(sdf)回复于 2003-09-05 13:20:48 得分 0
你试一下上面的方法
Top
14 楼jeall()回复于 2003-09-05 16:02:20 得分 10
我能问你的<asp:DropdownList ID="progress" runat="server" Width="40">中的progress在修改的时候是怎么和数据库中的内容进行绑定的吗?并且,怎样使DropdownList选中progress内容所在项!急!正好要用到!
http://expert.csdn.net/Expert/topic/2227/2227242.xml?temp=.1263239Top
15 楼jeall()回复于 2003-09-05 16:05:07 得分 0
上面的文章位置给错了!
http://expert.csdn.net/Expert/topic/2227/2227242.xml?temp=.1263239Top




