مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

moonfa1392

عضویت از 1394/08/17

سوال درباره GridView

  • شنبه 7 آذر 1394
  • 20:26
تشکر میکنم

سلام. سه تا سوال در مورد 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 میره و صفحات بعدی رو که میزنم نمیشه.

 لطفا راهنمایی کنید ممنون

پاسخ های این پرسش

تعداد پاسخ ها : 9 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • شنبه 7 آذر 1394
  • 21:24

میتونید برای درج آیکن و تصویر از ستونهایی با عنوان TemplateField استفاده کنید

این نوع ستون اجاره میده هر کدام از کامپوننت ها رو که خواستید در گرید استفاده کنید

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • شنبه 7 آذر 1394
  • 21:39
میشه لطفا یک نمونه کد بذارید یا توضیح بدید چجوری استفاده کنم؟ به ستون های TemplateField نمیشه خاصیت CommandName داد پس چجوری بهش دستور حذف سطر رو بدم؟ و اینکه چجوری آیکون رو قرار بدم؟
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 8 آذر 1394
  • 11:48

شما باید این خاصیت رو به کنترل های داخل این نوع ستون بدید

مثلا ImageButton این خاصیت رو به همراه CommandArgument داره

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • یکشنبه 8 آذر 1394
  • 17:31

  با سلام مجدد.

ممنون از راهنماییتون استاد

من 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

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 9 آذر 1394
  • 08:35

کد ها رو چک کردم درسته

اگه میشه یک نمونه ضمیمه کنید تا بررسی کنم

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • دوشنبه 9 آذر 1394
  • 13:27
فایل پروژه رو ضمیمه کردم ممنون

فایل های ضمیمه

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • دوشنبه 9 آذر 1394
  • 13:28
فایل پروژه رو ضمیمه کردم ممنون

فایل های ضمیمه

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 9 آذر 1394
  • 14:15

در اولین فرصت بررسی خواهم کرد

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • دوشنبه 9 آذر 1394
  • 15:07
خیلی ممنون استاد
کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)