PDA

View Full Version : سوال: gridview کار با دو فیلد به عنوان کلید اصلی



webman
چهارشنبه 19 تیر 1387, 17:25 عصر
با سلام, جدولی دارم دو فیلد آن کلید اصلی است یعنی هر دو فیلد تشکیل کلید اصلی را می دهند حالا در کار با gridview و دسترسی به این کلیدها مشکل دارم در DataKeyNames فقط نام یک فیلد را میتوان گذاشت در حالیکه برای هر گونه عملیات مانند انتخاب یک سطر و یا حذف یک سطر نیاز است که دسترسی به کلید اصلی یعنی هر دو فیلد داشته باشیم امیدوارم توانسته باشم منظورم را برسانم . پیشاپیش از راهنمائیهای شما کمال تشکر را دارم

webman
پنج شنبه 20 تیر 1387, 10:47 صبح
دوستان ممنون ، خودم بالاخره یک راه حل پیدا کردم

my_blithe
پنج شنبه 20 تیر 1387, 10:57 صبح
دوست من سوال شما رو من همین الان دیدم ولی منظورتون رو متوجه نشدم ، حالا اگه می شه کاملا سوال رو باز کنید و جوابی هم که پیدا کردید بزارید.

webman
پنج شنبه 20 تیر 1387, 13:59 عصر
با تشکر از توجه دوستم my_blithe ، در gridview برای هر گونه عملیات مانند select,del نیاز به یک فیلد id یکتا داریم (کلید اصلی در جدول) که با این id سطر مورد نظر شناسائی شده و عملیات مانند del روی آن سطر انجام میشود. حال من id دارم که با هم تشکیل کلید اصلی را میدهند insid, specid یعنی برای یافتن یا دسترسی به رکورد یا سطر منحصر به فرد نیاز به این دو فیلد دارم مثلا insid=2 , specid=5 یک رکورد منحصر به فرد را مشخص میکند در gridview برای معرفی کلید اصلی از DataKeyNames استفاده مشود.
من می خواستم با به دست آوردن insid, specid و از طریق انتخاب سطر در gridview و توسط این دو id سایر فیلدهای این سطر را در یک formView نشان دهم پس به این دو id نیاز بود . insidرا درDataKeyNames قرار دادم و specid هم توسط تعریف یک linkButton در TemplateField مربوط به gridview و با رویداد RowCommand مربوط به gridviewبه datasource یک formview فرستادم
insid را هم در رویداد GridSpec_SelectedIndexChanged به همان datasource فرستادم


Protected Sub GridSpec_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs ) Handles GridSpec.RowCommand
If e.CommandName = "select" Then
ADSedit.SelectParameters("specid").DefaultValue = e.CommandArgument
FormView1.Visible = True
End If
End Sub
Protected Sub GridSpec_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridSpec.SelectedIndexChanged
ADSedit.SelectParameters("instrumentid").DefaultValue = GridSpec.SelectedValue

End Sub

یک سوال اگر ما سه تا فیلد داشته باشیم که با هم تشکیل کلید اصلی دهند و برای دسترسی به هر رکورد باید با استفاده از این سه فیلد آن رکورد را بیابیم چکار باید بکنیم... در gridview یکی با datakeynames دیگری با استفاده از یک linkbutton , وسومی با چی
امیدوارم متوجه شده باشید توضیح در اینجا کمی مشکل است کمک کنید تا با هم بیشتر بیاموزیم


<Columns>
<asp:BoundField DataField ="instrumentid" Visible="false" />
<asp:BoundField DataField ="specid" Visible="false" />
<asp:BoundField DataField="specname" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="Linkselect" runat="server" CommandName="select" CommandArgument='<%# Eval("specid") %>' >select</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>

m.hamidreza
پنج شنبه 20 تیر 1387, 14:38 عصر
در DataKeyNames فقط نام یک فیلد را میتوان گذاشت

شما چندتا فیلد هم میتونی بنویسی! با کاما جدا کن.



<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"
DataKeyNames="emp_id,dept_id">

webman
پنج شنبه 20 تیر 1387, 17:43 عصر
با تشکر ازm.hamidreza ، اما چگونه میشه در هر سطر به این فیلدها دسترسی داشت یک راهنمائی کوچولو ، یک کمک واقعا ممنون میشم

m.hamidreza
جمعه 21 تیر 1387, 17:44 عصر
تو لینک های زیر کدهای خوبی میتونی پیدا کنی:
http://www.codeproject.com/KB/grid/Data_presentation.aspx
search in google (http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla:en-US:official&pwst=1&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=multiple+datakeys+in+asp.net&spell=1)