PDA

View Full Version : مبتدی: باز شدن پنجره جدید بعد از فشردن کلید



MasoudAdmin
پنج شنبه 24 دی 1394, 11:51 صبح
با سلام
می یک gridview دارم که اطلاعات فردی افراد رو نمایش میده
یک کلید هم دارم که واسه ویرایش اطلاعات فردی اون فرد انتخاب شده است.
وقتی کلید رو میزنم توی هم پنجره ای که هستم فرم اصلاح اطلاعات رو باز می کنه
می خوام بعد از انتخاب ردیف در gridview و زدن کلید ویرایش پنجره جدید باز بشه
ممنون میشم کمک کنید.
با تشکر

xsbehx
پنج شنبه 24 دی 1394, 14:50 عصر
ببین دوست عزیز
توضیحاتش این دستورات بیش از یک صفحه است. یعنی این چیزی که شما می خوای، اگر بلد نباشی خودش یک جلسه اموزشه. ولی من کدهاشو می زارم اینجا تا کارت راه بیافته
این کدهای خود gridview هست که حالا احتمال داره که فیلد های جدول شما کمتر یا بیشتر باشه


<asp:GridView ID="grdShowCatefories" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="fldCategoryId" DataSourceID="LinqDataSource1" ForeColor="#333333" GridLines="None" OnRowCommand="grdShowCatefories_RowCommand">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField DataField="fldCategoryId" HeaderText="fldCategoryId" InsertVisible="False" ReadOnly="True" SortExpression="fldCategoryId" />
<asp:BoundField DataField="fldTitle" HeaderText="fldTitle" SortExpression="fldTitle" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnDelete" runat="server" CommandArgument='<%# Eval("fldCategoryId") %>' CommandName="btnDeleteName" Text="حذف" OnClientClick="javascript:return confirm('برای حذف دسته مورد نظر مطمئن هستید!؟');"/>
<asp:Button ID="btnUpdate" runat="server" CommandArgument='<%# Eval("fldCategoryId") %>' CommandName="btnUpdateName" Text="ویرایش" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="DataClassesDataContext" EntityTypeName="" TableName="tblCategories">
</asp:LinqDataSource>

دوتا دکمه حذف و ویرایش به gridview شما اضافه می شه که اگر طرف دکمه حذف رو بزنه بعد از اخطار دادن که ایا تایید می کنی حذف کنم یا نه، می ره و حذف می کنه و ویرایش هم شما رو می فرسته به یک صفحه دیگه و اونجا با کوئری استرینگ می تونی بفهمی رو کدوم ایتم کلیک شده و اومده تو صفحه ویرایش.
اینهم کدهای پشت صحنه :


protected void grdShowCatefories_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "btnUpdateName")
{
Response.Redirect("EditCategory.aspx?CategoryId=" + e.CommandArgument);
}
else if (e.CommandName == "btnDeleteName")
{
//دستورات حذف رو اینجا بنویس
}
}


اگر نمی دونی کوئری استرینگ چیه بگرد پیدا کن داستانش چیه. چون اونطرف باید با کوئری استرینگ ایتم مورد نظر رو ویرایش کنی
نکته مهم اینه که شما تو gridview خصوصیت CommandArgument رو باید به جاش کلید اصلی جدول خودتو بزاری(صفحه html رو می گم)

MasoudAdmin
پنج شنبه 24 دی 1394, 18:24 عصر
از پاسختون ممنون
شاید من بد توضیح دادم.اصلا من از کلید ویرایش خود GridView استفاده نکردم.به جاش از یک ImageButton استفاده کردم.وقتی ردیف رو در جدول انتخاب می کنم و اون کلید رو می زنم می خوام پنجره جدید با اون ID که از جدول انتخاب شده باز بشه.جستجو که کردم باید داخل OnClientClick کد بنویسم.اینو نمی دونم.
ممنون میشم کمک کنید

xsbehx
پنج شنبه 24 دی 1394, 21:29 عصر
من هم از کلید دکمه های ویرایش و حذف اماده گرید ویو استفاده نکردم بلکه خودم دوتا دکمه اضافه کردم و چون مراحلش طولانی بود حوصله نداشتم بگم چطوری اون دوتا دکمه رو اضافه کردم!
بخاطر همین بود که گفتم یک جلسه اموزش می خواد.
چون باید یاد بگیری که چطوری به ازای هر سطر داده تو گریدویو یکسری ایتم اضافه کنی، مثلا دکمه ویرایش یا چک باکس یا ...
بعد شما باید بدونی commandAgument چیه
همینطور CommandName و ...
بگذریم. همین کار کار شما فعلا راه بیافته کفایت می کنه بهمین منظور :
شما به جای اون دوتا دکمه می تونی image button خودت رو بندازی یا هر چیزه دیگه ای
یعنی به جای این خط شما بیا ImageButton بنداز


<asp:Button ID="btnUpdate" runat="server" CommandArgument='<%# Eval("fldCategoryId") %>' CommandName="btnUpdateName" Text="ویرایش" />


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

MasoudAdmin
پنج شنبه 24 دی 1394, 23:56 عصر
از کمکتون ممنون
من عکس صفحه رو میذارم
138399
اگه دقت کنید من یکی از ستون ها را انتخاب سطر گذاشتم که وقتی هم انتخاب میشه رنگ سبز میشه البته با رویداد SelectedIndexChanged
بعد از اینکه سطر انتخاب شد اون کلیدی که با علامت مشخص کردم رو می زنم اطلاعات رو هم درست در صفحه ویرایش اطلاعات میاره ولی نه در پنجره جدید.
می خوام راهنمایی کنید وقتی من سطر رو انتخاب کردم و کلید ویرایش رو زدم پنجره جدیدی برای ویرایش اطلاعات باز بشه
بازم ببخشید من مبتدی هستم
ممنون

xsbehx
جمعه 25 دی 1394, 00:33 صبح
می دونی مشکل کار شما اینه که لقمه رو داری می پیچونی
چون داری کاری که تو یک بار کلیک می شه کرد رو تو دوبار کلیک انجام می ده یعنی یکبار انتخاب و یک بار ویرایش
بگذریم
اگر می خوای وقتی کاربر سطری رو انتخاب کرد بره داخل صفحه جدید این کد رو بزار تو SelectedIndexChanged گرید ویو ولی اگر می خوای دکمه ای رو زد بره داخل صفحه جدید باید کد زیر رو بنویسی تو پشت دکمه


Response.Redirect("Edit.aspx?QueryStringID={0}", GridView1.SelectedRow.Cells[0].Text);

این دستور Cells[0] باید یک ستونی باشه که حتما کلید اصلی باشه یا مقدار اون فیلد غیرتکراری باشه
پس اگر نام و ... که تو این جدول داری امکان تکراری بودن هست باید فیلد کلید اصلی رو هم تو این گرید ویوت بیاری
واگر اون فیلد رو اوردی باید شماره ستون اون رو بنویسی مثلا Cells[2]
باید توجه داشته باشی که سی شارپ zero index هست یعنی خونه های گرید ویو از صفر شروع می شه پس اگر کلید اصلیت شد خونه سومت باید بنویسی cells 2

مورد بعدی اینه که تو اون صفحه جدید از کجا بفهمی که رو کدوم ایتم کلیک شده و اومده تو صفحه ویرایش؟
از همون کوئری استرینگی که فرستادی
حالا چطوری ازش استفاده می کنه؟


Request.QueryString["QueryStringID"]

با فرض این که حتما کلید اصلی رو تو گرید ویو گزاشتی و اونو با کوئری استرینگ فرستادی و اسم کوئری استرینگت هم QueryStringID هست، کد بالا عنصری رو که برای ویرایش انتخاب شده رو برات بر می گردونه. حالا کافیه بر اساس اون کلید اصلی دستور select یا update یا delete یا .... بنویسی

tkord26
جمعه 25 دی 1394, 01:07 صبح
سلام ..
منم برات کدهای مدیریت سایتم رو میذارم شاید به کمکت بیاد! بنظرمن توضیحاتی که دوستمون داد کامل بود و من توضیحی نمیدم! فقط کدها رو میذارم... ازLINQ to Entites استفاده کردم

<telerik:RadGrid ID="rgvShowListUser" DataSourceID="dsShowListUser" OnItemCommand="rgvShowListUser_OnItemCommand" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellSpacing="-1" GridLines="Both">
<MasterTableView DataSourceID="dsShowListUser" Dir="RTL" CommandItemDisplay="Top">
<Columns>
<telerik:GridBoundColumn DataField="UserID" HeaderText="UserID" Visible="False" UniqueName="column" FilterControlAltText="Filter column column">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="RoleTitle" HeaderText="سطح دسترسی" UniqueName="column1" FilterControlAltText="Filter column1 column">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Name" HeaderText="نام" UniqueName="column2" FilterControlAltText="Filter column2 column">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Family" HeaderText="نام خانوادگی" UniqueName="column3" FilterControlAltText="Filter column3 column">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Email" HeaderText="ایمیل" UniqueName="column4" FilterControlAltText="Filter column4 column">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="UserName" HeaderText="نام کاربری" UniqueName="column5" FilterControlAltText="Filter column5 column">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Password" HeaderText="کلمه عبور" UniqueName="column6" FilterControlAltText="Filter column6 column">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Date" DataFormatString="{0:yyyy/MM/dd}" HeaderText="تاریخ ثبت" UniqueName="column7" FilterControlAltText="Filter column7 column">
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn UniqueName="TemplateColumn" FilterControlAltText="Filter TemplateColumn column" HeaderText="دستورات">
<ItemTemplate>
<asp:LinkButton runat="server" ID="lbEdit" CssClass="btn btn-success btn-xs" CommandArgument='<%#Eval("UserID") %>' CommandName="DoEdite">ویرایش</asp:LinkButton>
<asp:LinkButton runat="server" ID="lbDelete" CssClass="btn btn-danger btn-xs" CommandArgument='<%#Eval("UserID") %>' CommandName="DoDelete">حذف</asp:LinkButton>
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
اینم کدهای C# :

protected void rgvShowListUser_OnItemCommand(object sender, GridCommandEventArgs e)
{
switch (e.CommandName)
{
case "InitInsert":
{
e.Canceled = true;
mvShowListUser.SetActiveView(vwAddUser);
break;

}
case "DoEdite":
{
int userid = int.Parse(e.CommandArgument.ToString());
var user = (from u in db.tbl_User where u.UserID == userid select u).First();


txtName.Text = user.Name;
txtFamily.Text = user.Family;
txtUserName.Text = user.UserName;
txtPassword.Text = user.Password;
txtEmail.Text = user.Email;
btnAdd.Text = "ویرایش";
ViewState["userid"] = userid;
mvShowListUser.SetActiveView(vwAddUser);
break;

}
case "DoDelete":
{
int userid = int.Parse(e.CommandArgument.ToString());
var user = (from u in db.tbl_User where u.UserID == userid select u).First();
db.tbl_User.Remove(user);
db.SaveChanges();
rgvShowListUser.DataBind();
break;
}

}
}
موفق باشی