Gridview 动态绑定模板 获取该行的主键
public class CustomGridViewTemplate : ITemplate{
private DataControlRowType _templateType;
private string _columnName;
private string _columnChinaName;
private string _dataType;
private string _tablefiledName;
private Manage.DAL.TableEnum enumObj = new Manage.DAL.TableEnum();
public CustomGridViewTemplate(DataControlRowType templateType, string columnName,string columnChinaName)
{
_templateType = templateType;
_columnName = columnName;
_columnChinaName = columnChinaName;
}
public CustomGridViewTemplate(DataControlRowType templateType, string columnName,string columnChinaName, string dataType)
{
_templateType = templateType;
_columnName = columnName;
_dataType = dataType;
_columnChinaName = columnChinaName;
}
public CustomGridViewTemplate(DataControlRowType templateType, string columnName, string columnChinaName, string dataType, string tablefiledName)
{
_templateType = templateType;
_columnName = columnName;
_dataType = dataType;
_tablefiledName = tablefiledName;
_columnChinaName = columnChinaName;
}
/// <summary>
/// 此方法为 GridView执行DataBind方法后触发执行
/// 按行顺序向下执行(行->行中各列)
/// </summary>
/// <param name="container"></param>
public void InstantiateIn(System.Web.UI.Control container)
{
switch (_templateType)
{
case DataControlRowType.Header:
//创建当前列的标题
Literal literal = new Literal();
literal.Text = _columnChinaName;
container.Controls.Add(literal);
break;
case DataControlRowType.DataRow:
Literal label = new Literal();
//// 注册用于数据绑定的事件处理程序
label.DataBinding += new EventHandler(label_DataBinding);//创建数据绑定事件
container.Controls.Add(label);
break;
default:
break;
}
}
void label_DataBinding(object sender, EventArgs e)
{
Literal hi = (Literal)sender;
GridViewRow container = (GridViewRow)hi.NamingContainer;
switch (_dataType)
{
case "int":
hi.Text = IntBind(_tablefiledName, DataBinder.Eval(container.DataItem, _columnName).ToString());
break;
case "varchar":
string Path = StringBind(_tablefiledName).ToString();
if ( Path == "")
{
hi.Text = DataBinder.Eval(container.DataItem, _columnName).ToString();
}
else
{
hi.ID = tablefiledName;
hi.Text = "<a href ='" + Path.Trim() + "?Name=" + DataBinder.Eval(container.DataItem, _columnName).ToString() + "'>" + DataBinder.Eval(container.DataItem, _columnName).ToString() + "</a>";
}
break;
default:
break;
}
}
private string IntBind(string _tablefiledName, string Value)
{
string EnumValue = Value;
DataTable dt = enumObj.GetList(" EnumLocation = '" + _tablefiledName + "' and EnumKey ='" + Value + "'").Tables[0];
if (dt.Rows.Count == 1)
{
EnumValue = dt.Rows[0]["EnumValue"].ToString();
}
return EnumValue;
}
private string StringBind(string _tablefiledName)
{
string EnumValue = string.Empty;
DataTable dt = enumObj.GetList(" EnumLocation = '" + _tablefiledName + "'").Tables[0];
if (dt.Rows.Count == 1)
{
EnumValue = dt.Rows[0]["EnumValue"].ToString();
}
return EnumValue;
}
}
在上面那个 Name 获取值的地方,我想获取该行的主键ID,也就是一个数据库表的主键,因为我在这连接的地址需要ID值,来获取详细信息,不知道哪位高手,做过类似的,不要吝啬自己的宝贵经验和知识,给予帮助,在此谢谢了。 --------------------编程问答-------------------- 提问的水平也越来越低了,CSDN因此成了初学者的天堂。 --------------------编程问答-------------------- 多看书,多看例子,一出来就 提问,指望别人给答案。 --------------------编程问答-------------------- 无聊的家伙,不要在这捣乱,有能耐就直接拿出来,没本事放屁的话就憋在肚子里啊,别出来丢人 --------------------编程问答-------------------- hi.Text = "<a href ='" + Path.Trim() + "?Name=" + DataBinder.Eval(container.DataItem, _columnName).ToString() + "'>" + DataBinder.Eval(container.DataItem, _columnName).ToString() + "</a>";
这里?
有没有给GridView设置主键? --------------------编程问答-------------------- 这里设置主键,如果有多个,用逗号隔开
<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID"
</asp:GridView>
取的时候这样:
--------------------编程问答--------------------
string ID=this.GridView1.DataKeys[container.RowIndex].Values["ID"].ToString();
protected void Delete_Click(object sender, EventArgs e)
{
LinkButton button = sender as LinkButton;
if (DeleteMem(button.CommandArgument))
{
;
}
}
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:LinkButton ID="Button2" runat="server" OnClientClick=" javascript:return confirm('确定要删除该人员?')"
Text="删除" OnClick="Delete_Click" CommandArgument='<%#Eval("ID") %>' />
</ItemTemplate>
</asp:TemplateField>
CommandArgument='<%#Eval("ID") %>'要点在于这句话
另外补充一句,这样的东西别人不可能不会 --------------------编程问答--------------------
GridView1.DataKeyField="S_ID";绑定数据源的时候绑上;取值是:GridView1.DataKeys[(int)e.Item.ItemIndex]
补充:.NET技术 , C#