PDA

View Full Version : سوال: انتخاب رکورد در گرید و نمایش ان رکورد در گرید دیگر



mahdidabaghi
پنج شنبه 23 خرداد 1392, 19:12 عصر
سلام به دوستان عزیز
من دو تا گرید دارم و اولی به دیتابیس بایند هست
حالا میخوام وقتی رکوردی از گرید اول رو انتخاب میکنم اون رکورد عینا در گرید دوم به صورت ایجکسی قرار بگیره
(البته اگه بشه با کمک جاوا اسکریپت و جی کوئری)
ممنون میشم اگه این کار امکان پذیره به چه صورتی قابل انجام شدنه؟

korosh00
پنج شنبه 23 خرداد 1392, 19:54 عصر
اگه به این صورت بخواهی که در یک گرید با کلیک روی اون در گرید دیگر مشخصات اون رکورد نمایش داده بشه بگو تا برات بزارم .

mahdidabaghi
پنج شنبه 23 خرداد 1392, 20:09 عصر
اگه به این صورت بخواهی که در یک گرید با کلیک روی اون در گرید دیگر مشخصات اون رکورد نمایش داده بشه بگو تا برات بزارم .
ممنونم میشم مهندس اگه سمپلی دارین بذارین

mahdidabaghi
پنج شنبه 23 خرداد 1392, 20:44 عصر
دوستان و اساتید دیگه هم اگه کمکی بتونن بکنند بسیار ممنون میشم

mahdidabaghi
جمعه 24 خرداد 1392, 10:14 صبح
dیعنی واقعا اینکار نشدنیه؟توی نت مورد قابل توجهی پیدا نکردم:گریه:

korosh00
جمعه 24 خرداد 1392, 11:16 صبح
<%@ Page Language="C#‎‎" AutoEventWireup="true" CodeFile="2grid.aspx.cs" Inherits="_2grid" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
CellPadding="4" DataSourceID="SqlDataSource1" Height="230px" Width="475px"
DataKeyNames="idm">
<Columns>
<asp:BoundField DataField="idm" HeaderText="idm" SortExpression="idm" />
<asp:BoundField DataField="nam" HeaderText="nam" SortExpression="nam" />
<asp:BoundField DataField="fam" HeaderText="fam" SortExpression="fam" />
<asp:CommandField ShowSelectButton="true" HeaderText="انتخاب سطر"/>
</Columns>
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
<RowStyle BackColor="White" ForeColor="#003399" />
<SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
<SortedAscendingCellStyle BackColor="#EDF6F6" />
<SortedAscendingHeaderStyle BackColor="#0D4AC4" />
<SortedDescendingCellStyle BackColor="#D6DFDF" />
<SortedDescendingHeaderStyle BackColor="#002876" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:2gridConnectionString %>"
SelectCommand="SELECT * FROM [moshtari]"></asp:SqlDataSource>

<br />
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px"
CellPadding="2" DataSourceID="SqlDataSource2" ForeColor="Black"
GridLines="None"

style="top: 14px; left: 500px; position: absolute; width: 475px; height: 230px; margin-top: 0px">
<AlternatingRowStyle BackColor="PaleGoldenrod" />
<Columns>
<asp:BoundField DataField="idmahsol" HeaderText="idmahsol"
SortExpression="idmahsol" />
<asp:BoundField DataField="kala" HeaderText="kala" SortExpression="kala" />
<asp:BoundField DataField="gheymat" HeaderText="gheymat"
SortExpression="gheymat" />
</Columns>
<FooterStyle BackColor="Tan" />
<HeaderStyle BackColor="Tan" Font-Bold="True" />
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue"
HorizontalAlign="Center" />
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
<SortedAscendingCellStyle BackColor="#FAFAE7" />
<SortedAscendingHeaderStyle BackColor="#DAC09E" />
<SortedDescendingCellStyle BackColor="#E1DB9C" />
<SortedDescendingHeaderStyle BackColor="#C2A47B" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:2gridConnectionString %>"
SelectCommand="SELECT * from kala where idmahsol=@idm">
<SelectParameters>

<asp:ControlParameter Name="idm" ControlID="GridView1" PropertyName="selectedDatakey.value" />
</SelectParameters>

</asp:SqlDataSource>

</div>
</form>
</body>
</html>


سلام یک صفحه فرم وب معمولی بذارو تو کدهای html این کدهای بالا را کلا کپی کن یا
دو تا گرید داخلشون بنداز و دوتا هم دیتاسورس بنداز داخل
فقط توجه کن من بر اساس آی دی گرید اول این کار را می کنم یعنی دو تادیتابیس که درست کردی مثلا یکی مشخصات نفرباشه که آی دیش را فعلا برای اینکه خوب یاد بگیری اتوماتیک عددی نذار دستی عددش را وارد کن بعد تو دیتابیس دوم هم همین آی دی را دستی وارد کن باید طرف وقتی ردیف مشخص خودش را در گرید اول کلیک میکنه با آی دی مثلا100 تو گردید دوم هم یک آی دی 100 وجود داشته باشه که بتونه نشان بده .
پس شما دوتا دیتابیس بساز یکی بنام مشخصات و یکی بنام محصولات فیلد آی دی نامش تو هر دو آی دی بزار و شمارش را اتوماتیک نکن که خودش بره .
حالاموقع پر کردن جداول مثلا آرش عسگری آی دی را هم یک بزار
تو محصولات بذار آی دی 1 محصول هم لپ تاپ
بازم می تونی آی دی 1 تعریف کنی و محصول موس بزاری
خلاصه تعریف وقتی روی گرید اول گزینه سلکت را بزنه اون رکورد انتخاب شده و بر اساس آی دیش تو گرید دوم آی دی مانند اون را انتخاب میکنه و نمایش میده .
تمام

mahdidabaghi
جمعه 24 خرداد 1392, 12:59 عصر
<%@ Page Language="C#‎‎" AutoEventWireup="true" CodeFile="2grid.aspx.cs" Inherits="_2grid" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px"
CellPadding="4" DataSourceID="SqlDataSource1" Height="230px" Width="475px"
DataKeyNames="idm">
<Columns>
<asp:BoundField DataField="idm" HeaderText="idm" SortExpression="idm" />
<asp:BoundField DataField="nam" HeaderText="nam" SortExpression="nam" />
<asp:BoundField DataField="fam" HeaderText="fam" SortExpression="fam" />
<asp:CommandField ShowSelectButton="true" HeaderText="انتخاب سطر"/>
</Columns>
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
<RowStyle BackColor="White" ForeColor="#003399" />
<SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
<SortedAscendingCellStyle BackColor="#EDF6F6" />
<SortedAscendingHeaderStyle BackColor="#0D4AC4" />
<SortedDescendingCellStyle BackColor="#D6DFDF" />
<SortedDescendingHeaderStyle BackColor="#002876" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:2gridConnectionString %>"
SelectCommand="SELECT * FROM [moshtari]"></asp:SqlDataSource>

<br />
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px"
CellPadding="2" DataSourceID="SqlDataSource2" ForeColor="Black"
GridLines="None"

style="top: 14px; left: 500px; position: absolute; width: 475px; height: 230px; margin-top: 0px">
<AlternatingRowStyle BackColor="PaleGoldenrod" />
<Columns>
<asp:BoundField DataField="idmahsol" HeaderText="idmahsol"
SortExpression="idmahsol" />
<asp:BoundField DataField="kala" HeaderText="kala" SortExpression="kala" />
<asp:BoundField DataField="gheymat" HeaderText="gheymat"
SortExpression="gheymat" />
</Columns>
<FooterStyle BackColor="Tan" />
<HeaderStyle BackColor="Tan" Font-Bold="True" />
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue"
HorizontalAlign="Center" />
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
<SortedAscendingCellStyle BackColor="#FAFAE7" />
<SortedAscendingHeaderStyle BackColor="#DAC09E" />
<SortedDescendingCellStyle BackColor="#E1DB9C" />
<SortedDescendingHeaderStyle BackColor="#C2A47B" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource2" runat="server"
ConnectionString="<%$ ConnectionStrings:2gridConnectionString %>"
SelectCommand="SELECT * from kala where idmahsol=@idm">
<SelectParameters>

<asp:ControlParameter Name="idm" ControlID="GridView1" PropertyName="selectedDatakey.value" />
</SelectParameters>

</asp:SqlDataSource>

</div>
</form>
</body>
</html>


سلام یک صفحه فرم وب معمولی بذارو تو کدهای html این کدهای بالا را کلا کپی کن یا
دو تا گرید داخلشون بنداز و دوتا هم دیتاسورس بنداز داخل
فقط توجه کن من بر اساس آی دی گرید اول این کار را می کنم یعنی دو تادیتابیس که درست کردی مثلا یکی مشخصات نفرباشه که آی دیش را فعلا برای اینکه خوب یاد بگیری اتوماتیک عددی نذار دستی عددش را وارد کن بعد تو دیتابیس دوم هم همین آی دی را دستی وارد کن باید طرف وقتی ردیف مشخص خودش را در گرید اول کلیک میکنه با آی دی مثلا100 تو گردید دوم هم یک آی دی 100 وجود داشته باشه که بتونه نشان بده .
پس شما دوتا دیتابیس بساز یکی بنام مشخصات و یکی بنام محصولات فیلد آی دی نامش تو هر دو آی دی بزار و شمارش را اتوماتیک نکن که خودش بره .
حالاموقع پر کردن جداول مثلا آرش عسگری آی دی را هم یک بزار
تو محصولات بذار آی دی 1 محصول هم لپ تاپ
بازم می تونی آی دی 1 تعریف کنی و محصول موس بزاری
خلاصه تعریف وقتی روی گرید اول گزینه سلکت را بزنه اون رکورد انتخاب شده و بر اساس آی دیش تو گرید دوم آی دی مانند اون را انتخاب میکنه و نمایش میده .
تمام
ممنونم مهندس
بذار من اینجوری مشکلمو عنوان کنم :
من یه گرید واسه محصولات سایت دارم که به دیتابیس بایند شده و 3 ستون چک باکس(واسه انتخاب رکورد)و ایدی و نام داره و تعدادی رکورد که از دیتابیس میخونه و توی خودش نشون میده
حالا من میخوام وقتی طرف روی چک باکس هر کدوم از رکوردها کلیک کرد(یعنی رکورد رو انتخاب کرد) اون رکورد یا رکوردها به صورت ایجکسی در گرید دیگه ای نشون داده بشه تا کاربر بفهمه که این محصولات رو در سبد خریدش قرار داده.
امیدوارم که متوجه منظورم شده باشید.
با تشکر و سپاس از اساتید

korosh00
جمعه 24 خرداد 1392, 14:03 عصر
خوب همینه دیگه حالا من چک باکس نذاشتم select گذاشتم تو این را متوجه شدی و قشنگ تست کردی تا بعدا بجاش چک باکس بذاری ؟ آره ؟

mahdidabaghi
جمعه 24 خرداد 1392, 14:53 عصر
خوب همینه دیگه حالا من چک باکس نذاشتم select گذاشتم تو این را متوجه شدی و قشنگ تست کردی تا بعدا بجاش چک باکس بذاری ؟ آره ؟
دوست گرامی
من نمیخوام گرید دوم به بانک بایند باشه و دیگه اینکه میخوام به صورت ایجکس این کار رو انجام بده

mahdidabaghi
جمعه 24 خرداد 1392, 23:46 عصر
بسیار خوب
من بالاخره با کلی سر و کله زدن با کدها تونستم یه کارایی بکنم ولی هنو به جواب دلخواه نرسیدم.
این کد دو گریدی که توی صفحه قرار دادم:

<asp:GridView ID="grdViewExtra" runat="server" AutoGenerateColumns="False" DataKeyNames="extra_id"
DataSourceID="SqlDataSource1" CellPadding="2" CssClass="grid">
<AlternatingRowStyle BackColor="#9c507f" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<input type="checkbox" id="chk" class="chk" onclick="getRowIndex(this);" />
</ItemTemplate>
<HeaderStyle CssClass="chk_column" />
</asp:TemplateField>
<asp:BoundField DataField="extra_id" HeaderText="شناسه">
<HeaderStyle CssClass="column_id" />
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="extra_name" HeaderText="نام اضافه"></asp:BoundField>
</Columns>
<HeaderStyle CssClass="header_grid" />
</asp:GridView>

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="extra_id"
DataSourceID="SqlDataSource1" CellPadding="2" CssClass="grid">
<AlternatingRowStyle BackColor="#9c507f" />
<Columns>
<asp:BoundField DataField="extra_id" HeaderText="شناسه">
<HeaderStyle CssClass="column_id" />
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="extra_name" HeaderText="نام اضافه"></asp:BoundField>
</Columns>
<HeaderStyle CssClass="header_grid" />
</asp:GridView>
و با کلیک روی هر پک باکس این تابع فراخونی میشه:


function getRowIndex(checkbox) {
$(".chk").each(function () {
$(this).change(function () {
$(".chk").attr('checked', false);
$(this).attr('checked', true);
});
});
id = 0;
if (checkbox.checked) {
var rowIndex = 0;
var closestRow = $(checkbox).closest('tr');
rowIndex = $('tr').index(closestRow);
id = $('#<%= grdViewExtra.ClientID %> tbody tr:eq(' + rowIndex + ') td:eq(1)').html();
extra_name = $('#<%= grdViewExtra.ClientID %> tbody tr:eq(' + rowIndex + ') td:eq(2)').html();
refresh();
}
}

function refresh(i) {
$.ajax({
type: "POST",
url: "extra.aspx/GetExtra",
data: "{'id':'" + id + "' , 'extra_name':'" + extra_name + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function (response) {
alert(response.d);
},
error: function (response) {
alert(response.d);
}
});
if (i == 1) {
closeWindow(1);
}
if (i == 2) {
closeWindow(2);
}
}

function OnSuccess(response) {
alert("onsuc");
var xmlDoc = $.parseXML(response.d);
var xml = $(xmlDoc);
var posts = xml.find("Table");
var row = $("[id*=GridView1] tr:last-child").clone(true);
$("[id*=GridView1] tr").not($("[id*=GridView1] tr:first-child")).remove();
$.each(posts, function () {
var post = $(this);
$("td", row).eq(0).html($(this).find("extra_id").text());
$("td", row).eq(1).html($(this).find("extra_name").text());
$("[id*=GridView1]").append(row);
row = $("[id*=GridView1] tr:last-child").clone(true);
});
$("tr:even:gt(0)").css("background-color", "#9c507f");
$("tr:odd").css("background-color", "#631444");
}

و این هم کدهای سمت سرور :
1- تعریف متغیرهای زیر به صورت سراسری:


static DataTable dt = new DataTable();
static DataSet ds = new DataSet();

رویداد page_load :


protected void Page_Load(object sender, EventArgs e)
{

if (!Page.IsPostBack)
{
dt.Columns.Add("extra_id");
dt.Columns.Add("extra_name");
}

}

و در نهایت :


[WebMethod(EnableSession = true)]
public static string GetExtra(int id, string extra_name)
{

DataRow dr;
dr = dt.NewRow();
dr["extra_id"] = id;
dr["extra_name"] = extra_name;
dt.Rows.Add(dr);
dt.AcceptChanges();
ds.Tables.Add(dt);
string result = ds.GetXml();
return(result);

// string g;
// g = "<NewDataSet>\r\n <Table>\r\n <extra_id>4</extra_id>\r\n <extra_name>iii</extra_name>\r\n </Table>\r\n</NewDataSet>";
// return g;
}

طرز کار هم به این صورته با کلیک روی هر چک باکس ابتدا توسط تابع getRowIndex اطلاعات مربوط به فیلدهای اون رکورد برداشته شده و سپس تابع refresh اطلاعات رو توسط json به وب سرویس پاس داده و اون هم دیتاتیبل و دیتاست را با این رو رکورد پر میکنه و نتیجه رو به صورت xml به تابع رفرش برمیگردونه و این رکورد پر شده در دیتاتیبل در گرید دوم نشون داده میشه.
جال اینجایه وقتی من به صورت دستی این xml رو درست میکنم و به تابع رفرش پاسش میدم برنامه درست کار میکنه ولی وقتی به صورت زیر کد میزنم ارور میده:
ارور میده:


DataRow dr;
dr = dt.NewRow();
dr["extra_id"] = id;
dr["extra_name"] = extra_name;
dt.Rows.Add(dr);
dt.AcceptChanges();
ds.Tables.Add(dt);
string result = ds.GetXml();
return(result);

ولی این مورد درست کار میکنه:


string g;
g = "<NewDataSet>\r\n <Table>\r\n <extra_id>4</extra_id>\r\n <extra_name>iii</extra_name>\r\n </Table>\r\n</NewDataSet>";
return g;


دیگه مغزم هنگ کرده واسه این موضوع .ببخشید اگه طولانی شد.ولی ...
ایا استادی پیدا میشه گره کور این تایپیک رو باز کنه؟:افسرده::عصبانی++::گریه:

mahdidabaghi
شنبه 25 خرداد 1392, 10:12 صبح
دوستان گرامی یعنی تا حالا هیچکس این کار رو انجام نداده واقعا؟

fakhravari
شنبه 25 خرداد 1392, 11:06 صبح
شما با یه ابدیت پنل ساده و کمک از یه دیتاتیبل به راحتی میتونید مثال خودتون درست کنید.
بدون هیچ رفرشی.
چون شما گفته بودید به کمک ajax من جوابی نداده بودم.
چون زمانی که پیاده سازی ajax از ما میگیره صرف نمیکنه از این روش استفاده کنیم

mahdidabaghi
شنبه 25 خرداد 1392, 11:52 صبح
شما با یه ابدیت پنل ساده و کمک از یه دیتاتیبل به راحتی میتونید مثال خودتون درست کنید.
بدون هیچ رفرشی.

ممنونم
ولی اپدیت پنل سربار زیادی ایجاد میکنه.


چون زمانی که پیاده سازی ajax از ما میگیره صرف نمیکنه از این روش استفاده کنیم

درسته این روش سخت بنظر میاد ولی از لحاظ کارایی بهتره.
مشکل رو هم تونستم حل کنم.در متغیر Result رشته حاوی تگ <Table1> بود که اون رو با <Table> جاگزین کردم و خدا شکر حل شد
همین مشکل ساده و مسخره یه هفته حالمو گرفته بود :گریه:

fakhravari
شنبه 25 خرداد 1392, 14:07 عصر
مگه میخواهی facebook بزنی که میگی سربار زیادی داره

mahdidabaghi
شنبه 25 خرداد 1392, 16:42 عصر
مگه میخواهی facebook بزنی که میگی سربار زیادی داره
:قهقهه:
ای بابا ما رو چه به این کارا.
توی همین برنامه نویس بود که اساتید بزرگی فرموده بودند که اپدیت پنل رو به عنوان راه اخر انتخاب کنیم نه اولین راه.
منم رفتم ببینم دیگر راه ها چیه که با جی کوئری-ایجکس و Json و Web Service اشنا شدم و شروع به کار با اونا کردم.
مدتی پیش یه صفحه مدیریت سایت به صورت فول ایجکس(Jquery-Ajax) درست کردم که تمام کارها (ثبت-حذف-اپدیت-جستجو-آپلود فایل و ...) رو با این روش پیاده سازی کردم.
حالا دارم روی سبد خرید و کلا رو یه سایت فروشگاهی کار میکنم و قصدم اینه که این بار هم به صورت فول ایجکسی( جی کوئری-ایجکس) طراحیش کنم :چشمک: