DropDownList做模板列的时候怎样判断它是在DataGrid那一列选择的

lls0104 2005-10-09 10:15:04
protected void DropDownList2_SelectedIndexChanged(object sender, System.EventArgs e)
{
for(int i=0;i<10;i++)
{
DropDownList dd = (DropDownList)DataGrid1.Items[i].Cells[0].FindControl("DropDownList2");
if( dd.SelectedItem.Text=="White")
{
Response.Write("White"); break;
}
else if( dd.SelectedItem.Text=="Green")
{
Response.Write("Green");
break;
}
else
{
Response.Write("fff");
break;
}


}
==============================
Items[i]怎么总是保错呢?,这样写不行吗?
...全文
148 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
solsolsol 2005-10-09
  • 打赏
  • 举报
回复
DropDownList dd = (DropDownList)DataGrid1.Items[i].Cells[0].FindControl("DropDownList2");
这句你本身已经控制了是在第一列
既然是作为模板列 很显然所有的DropDownList2都在同一列
DropDownList dd = (DropDownList)DataGrid1.Items[i].FindControl("DropDownList2");
————————————————
如果把i换成具体数值程序可以执行
如gngnandgngn(仗义执言) 所说,确定是否10行
建议for(int i=0;i<10;i++)改成for(int i=0;i<this.DataGrid1.Rows.Count;i++)
gngnandgngn 2005-10-09
  • 打赏
  • 举报
回复
你的代码应该没错的,自己看看datagrid是不是真的有10行,dropdownlist是不是在第一列
lls0104 2005-10-09
  • 打赏
  • 举报
回复
upup
lls0104 2005-10-09
  • 打赏
  • 举报
回复

DataGrid嵌入DropDownList模板列,点击DropDownList时候,怎样确定它在那一行那一列?

(1)

DropDownList dd = (DropDownList)DataGrid1.FindControl("DropDownList2");
if( dd.SelectedItem.Text=="White")
{
Response.Write("White");
}
=======================
提示对象没有实例化

(2)

DropDownList dd = (DropDownList)DataGrid1.Items[i].Cells[0].FindControl("DropDownList2");
if( dd.SelectedItem.Text=="White")
{
Response.Write("White");
}
如果把i换成具体数值程序可以执行,但是如何来确定i的值?

lls0104 2005-10-09
  • 打赏
  • 举报
回复
模板列里不能这么写吗?
swordragon 2005-10-09
  • 打赏
  • 举报
回复
protected void DropDownList2_SelectedIndexChanged(object sender, System.EventArgs e)
{
for(int i=0;i<(DropDownList)DataGrid1.Items.Count;i++)
{
DropDownList dd = (DropDownList)DataGrid1.Items[i].Cells[0].FindControl("DropDownList2");
if( dd.SelectedItem.Text=="White")
{
Response.Write("White");break;
}
else if( dd.SelectedItem.Text=="Green")
{
Response.Write("Green");
break;
}
else
{
Response.Write("fff");
break;
}


}
crossrowman 2005-10-09
  • 打赏
  • 举报
回复
发错贴了~~
crossrowman 2005-10-09
  • 打赏
  • 举报
回复
用dropDownList作为模板列:
using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web;


namespace Test
{

public class QueryDDLDataEventArgs:EventArgs
{
public object DataSource;
public string DataTextField;
public string DataValueField;
}

public delegate void QueryDDLDataHandler(object sender,QueryDDLDataEventArgs e);

public class DropDownListTemplate:ITemplate
{
private string ColumnName;
public DropDownListTemplate(string ColumnName)
{
this.ColumnName = ColumnName;
}
public event QueryDDLDataHandler QueryDDLData;
public void InstantiateIn(Control container)
{
DropDownList dl = new DropDownList();
if(QueryDDLData!=null)
{
QueryDDLDataEventArgs ddle = new QueryDDLDataEventArgs();
QueryDDLData(this,ddle);
if(ddle.DataSource != null)
{
dl.DataSource = ddle.DataSource;
dl.DataValueField = ddle.DataValueField;
dl.DataTextField = ddle.DataTextField;
dl.DataBind();
}
}
//dl.DataBinding += new EventHandler(this.BindData);//?????
container.Controls.Add(dl);
dl.ID = ColumnName;
dl.Width = new Unit("100%");
}


//不知道为何这里无法初始化 DropDownList的初始选项
//改在了 DataGrid1_ItemDataBound 事件中来实现
private void BindData(object sender, EventArgs e)
{
DropDownList dl = (DropDownList)sender;
DataGridItem container = (DataGridItem)dl.NamingContainer;
string val = Convert.ToString(DataBinder.Eval(container.DataItem,ColumnName));
ListItem li = dl.Items.FindByValue(val);
if(li!= null)
{
li.Selected = true;
}
}
}
}


测试页:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Test;
using System.Data.SqlClient;

namespace TemplateTest
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Data.SqlClient.SqlConnection sqlConnection1;
protected System.Web.UI.WebControls.DropDownList DropDownList1;

private DataTable CityDatas;
private void Page_Load(object sender, System.EventArgs e)
{
//从数据库查询 绑定到dropDownList的数据
SqlDataAdapter cdata = new SqlDataAdapter("select * from City",sqlConnection1);
CityDatas = new DataTable();
cdata.Fill(CityDatas);

//新建模板列 关联到DropDownList
TemplateColumn CityCol = new TemplateColumn();
CityCol.HeaderText = "城市";

DropDownListTemplate cityItem = new DropDownListTemplate("CityID");
cityItem.QueryDDLData += new QueryDDLDataHandler(QueryDDLData);
CityCol.ItemTemplate = cityItem;
DataGrid1.Columns.Add( CityCol);

//绑定数据到DataGrid
SqlDataAdapter data = new SqlDataAdapter("select * from Corp",sqlConnection1);
DataTable dt = new DataTable();
data.Fill(dt);
DataGrid1.DataSource = dt.DefaultView;
DataGrid1.DataBind();
}
private void QueryDDLData(object sender,QueryDDLDataEventArgs e)
{
e.DataSource = CityDatas;
e.DataValueField = "CityID";
e.DataTextField ="CityName";
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
//
// sqlConnection1
//
this.sqlConnection1.ConnectionString = "workstation id=FMING;packet size=4096;user id=sa;data source=FMING;persist securi" +
"ty info=True;initial catalog=tmp;password=sa2000";
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion


//绑定Grid列里dropdownlist的初始选项
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
DropDownList ddl=(DropDownList)e.Item.FindControl("CityID"); //DropDownListTemplate cityItem = new DropDownListTemplate("CityID"); “CityID”是数据库字段名
ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"CityID"))).Selected=true;//CityID 是数据库字段名
}
}
}
}
swordragon 2005-10-09
  • 打赏
  • 举报
回复
DropDownList dd = (DropDownList)DataGrid1.Items[i].Cells[0].FindControl("DropDownList2_" + Convert.ToString(i));
lls0104 2005-10-09
  • 打赏
  • 举报
回复
不用循环也可以吧,不知道行不行
smallMage 2005-10-09
  • 打赏
  • 举报
回复
for(int i=0;i<10;i++)改成for(int i=0;i<this.DataGrid1.Rows.Count;i++)

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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