سلام. سه تا سوال در مورد GridView دارم.
اول این که میخوام توی GridView از آیکون استفاده کنم اما نمیدونم چجوری این کارو انجام بدم.
کد من به صورت زیر هست:
<asp:GridView ID="CntGridView1" CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass ="alt" dir="rtl" runat="server" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" AllowPaging="True" OnPageIndexChanging="CntGridView1_PageIndexChanging" PageSize="8" AutoGenerateColumns="False" OnRowCommand="CntGridView1_RowCommand"> <AlternatingRowStyle BackColor="#DCDCDC" /> <Columns> <asp:BoundField DataField="Usr_ID" HeaderText="کد" /> <asp:BoundField DataField="Usr_Name" HeaderText="نام و نام خانوادگي" /> <asp:BoundField DataField="Usr_Email" HeaderText="پست الکترونيک" /> <asp:ButtonField CommandName="DeleteContent" HeaderText="حذف" Text="حذف" /> <asp:ButtonField CommandName="EditeContent" HeaderText="ويرايش" Text="ويرايش" /> </Columns> </asp:GridView>
من در باتن فیلد ها text رو مساوی با ویرایش و حذف کردم اما میخوام به جای text از یه آیکون حذف یا ویرایش استفاده کنم. از HeaderImageUrl که نمیشه استفاده کرد چون عنوان عوض میشه و ImageUrl رو هم اضافه کردم و تغییری نکرد.
سوال دوم این که میخوام وقتی روی حذف کلیک کرد قبل از این که سطر حذف بشه از کاربر سوال کنه و بعد از زدن کلید تایید سطر حذف بشه.
کدنویسی ها رو به صورت زیر انجام دادم که البته تابع DAL برای اتصال به دیتابیس هست:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; public partial class Admin_Controls_ListAdmin : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { Alert.InnerText = "ويرايش اطلاعات يا حذف مديران."; Gridbind(); } public void Gridbind() { DAL run = new DAL(); DataTable dt = new DataTable(); string sqlText = "select * from Tbl_Users"; dt = run.ExecuteQuery(sqlText); CntGridView1.DataSource = dt; CntGridView1.DataBind(); } protected void CntGridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { CntGridView1.PageIndex = e.NewPageIndex; Gridbind(); } protected void CntGridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "DeleteContent") { int row = Convert.ToInt32(e.CommandArgument); int id = Convert.ToInt32(CntGridView1.Rows[row].Cells[0].Text); string st = string.Format("delete from Tbl_Users where Usr_ID={0} ", id); DAL d1 = new DAL(); d1.ExecNonQuery(st); Alert.InnerText = "مدير با موفقيت حذف شد"; Gridbind(); } else { int row = Convert.ToInt32(e.CommandArgument); int id = Convert.ToInt32(CntGridView1.Rows[row].Cells[0].Text); string st = string.Format("select * from Tbl_Users where Usr_ID={0} ", id); DAL d1 = new DAL(); DataTable dt = new DataTable(); dt = d1.ExecuteQuery(st); if (dt.Rows.Count > 0) { ID.Value = dt.Rows[0]["Usr_ID"].ToString(); Name.Value = dt.Rows[0]["Usr_Name"].ToString(); Email.Value = dt.Rows[0]["Usr_Email"].ToString(); Password.Value = dt.Rows[0]["Usr_Password"].ToString(); } } } protected void OK_Click(object sender, EventArgs e) { DAL d1 = new DAL(); string st = string.Format("update Tbl_Users set Usr_Name=N'{0}',Usr_PostID=1,Usr_Password='{1}',Usr_Email='{2}' where Usr_ID={3}", Name.Value, Password.Value, Email.Value, ID.Value); d1.ExecNonQuery(st); Alert.InnerText = "مدير با موفقيت ويرايش شد"; Name.Value = ""; Email.Value = ""; Password.Value = ""; Gridbind(); } }
و مشکل سوم که دارم این که وقتی محتوای دیتابیس زیاد میشه صفحات GridView به درستی کار نمیکنه. مثلا وقتی 600 تا سطر باشه GridView تا صفحه 15 میره و صفحات بعدی رو که میزنم نمیشه.
لطفا راهنمایی کنید ممنون
میتونید برای درج آیکن و تصویر از ستونهایی با عنوان TemplateField استفاده کنید
این نوع ستون اجاره میده هر کدام از کامپوننت ها رو که خواستید در گرید استفاده کنید
شما باید این خاصیت رو به کنترل های داخل این نوع ستون بدید
مثلا ImageButton این خاصیت رو به همراه CommandArgument داره
با سلام مجدد.
ممنون از راهنماییتون استاد
من Gridview رو به این صورت نوشتم و آیکون رو بهش دادم :
<asp:GridView ID="CntGridView1" CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass ="alt" dir="rtl" runat="server" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" AllowPaging="True" OnPageIndexChanging="CntGridView1_PageIndexChanging" PageSize="8" AutoGenerateColumns="False" OnRowCommand="CntGridView1_RowCommand"> <AlternatingRowStyle BackColor="#DCDCDC" /> <Columns> <asp:BoundField DataField="Usr_ID" HeaderText="کد" /> <asp:BoundField DataField="Usr_Name" HeaderText="نام و نام خانوادگي" /> <asp:BoundField DataField="Usr_Email" HeaderText="پست الکترونيک" /> <asp:TemplateField HeaderText="حذف"> <ItemTemplate> <asp:ImageButton ID="Delete" CommandArgument="DeleteContent" runat="server" ImageUrl="~/Admin/Images/12.png" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="ويرايش"> <ItemTemplate> <asp:ImageButton ID="Edite" CommandArgument="EditeContent" runat="server" ImageUrl="~/Admin/Images/12.png" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
و کد ها رو به این صورت تغییر دادم:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; public partial class Admin_Controls_ListAdmin : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { Alert.InnerText = "ويرايش اطلاعات يا حذف مديران"; Gridbind(); } public void Gridbind() { DAL run = new DAL(); DataTable dt = new DataTable(); string sqlText = "select * from Tbl_Users"; dt = run.ExecuteQuery(sqlText); CntGridView1.DataSource = dt; CntGridView1.DataBind(); } protected void CntGridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { CntGridView1.PageIndex = e.NewPageIndex; Gridbind(); } protected void CntGridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandArgument == "DeleteContent") { int row = Convert.ToInt32(e.CommandArgument); int id = Convert.ToInt32(CntGridView1.Rows[row].Cells[0].Text); string st = string.Format("delete from Tbl_Users where Usr_ID={0} ", id); DAL d1 = new DAL(); d1.ExecNonQuery(st); Alert.InnerText = "با موفقيت حذف شد"; Gridbind(); } else { int row = Convert.ToInt32(e.CommandArgument); int id = Convert.ToInt32(CntGridView1.Rows[row].Cells[0].Text); string st = string.Format("select * from Tbl_Users where Usr_ID={0} ", id); DAL d1 = new DAL(); DataTable dt = new DataTable(); dt = d1.ExecuteQuery(st); if (dt.Rows.Count > 0) { ID.Value = dt.Rows[0]["Usr_ID"].ToString(); Name.Value = dt.Rows[0]["Usr_Name"].ToString(); Email.Value = dt.Rows[0]["Usr_Email"].ToString(); Password.Value = dt.Rows[0]["Usr_Password"].ToString(); } } } protected void OK_Click(object sender, EventArgs e) { DAL d1 = new DAL(); string st = string.Format("update Tbl_Users set Usr_Name=N'{0}',Usr_PostID=1,Usr_Password='{1}',Usr_Email='{2}' where Usr_ID={3}", Name.Value, Password.Value, Email.Value, ID.Value); d1.ExecNonQuery(st); Alert.InnerText = "با موفقيت ويرايش شد"; Name.Value = ""; Email.Value = ""; Password.Value = ""; Gridbind(); } }
اما حذف یا ویرایش عمل نمیکنه و نفهمیدم کجا رو اشتباه نوشتم K
کد ها رو چک کردم درسته
اگه میشه یک نمونه ضمیمه کنید تا بررسی کنم
در اولین فرصت بررسی خواهم کرد
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)