当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,