자동으로 생성 된 편집 단추가있는 GridView가 있습니다. 간단한 입력 필드가 아닌 항목의 드롭 다운 목록이되기를 원했기 때문에 Image 열에 대한 사용자 정의 된 동작을 원했습니다. 그리고 데이터베이스의 값이 실제로 그렇지 않은 경우를 대비하여 멋진 "fallback"을 원했습니다. 드롭 다운 목록에 존재합니다.C# DotNetNuke 모듈 : GridVIew AutoGenerateEditButton이 업데이트시 필드 위로 건너 뜁니다.
코드를 사용하여 지금까지 내가 수행 한 코드에서 Image 필드에서 원하는 동작을 얻었습니다. 내가 때문에, 좋지 않다
ObjectDataSource 'objDataSource' could not find a non-generic method 'UpdateDiscovery' that has parameters: ModuleId, Visible, Position, Title, Link, ItemId.
: 문제는 내가 특정 필드를 업데이트 할 때, 나는 오류가 그것과 양식을 업데이트하는 방법을 찾을 수없는 나를 다시 뱉어 얻을 수 있다는 것입니다 UpdateDiscovery 메소드가 있습니다. 그러나 Title과 Link 사이에는 Image 필드에 속한 또 다른 매개 변수가 있어야하며 전달되지 않습니다. 그게 아마도 업데이 트 버튼이 그 필드를 전달하지 않는 것을 알게되면 TemplateField와 BoundField가 아니므로 Bind('image')
을 드롭 다운 목록의 선택된 값으로 사용할 때 업데이트가 잘된 것 같습니다. 그러나 데이터베이스의 필드가 실제로 행이 존재할 때만 편집 할 수 있습니다. 그렇지 않으면 폭탄이 튀어 나와 드롭 다운 목록에없는 값에 대한 오류가 표시됩니다.
이 I는 다음의 GridView가 정의한 :
<asp:GridView ID="grdDiscoverys" runat="server" DataSourceID="objDataSource" EnableModelValidation="True" AutoGenerateColumns="false" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" DataKeyNames="ItemId" OnRowDataBound="cmdDiscovery_RowDataBound">
<Columns>
<asp:BoundField DataField="ItemId" HeaderText="#" ReadOnly="true" />
<asp:BoundField DataField="Visible" HeaderText="Visible" />
<asp:BoundField DataField="Position" HeaderText="Position" />
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Label ID="lblViewImage" runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlEditImage" runat="server" title="Image" DataValueField="Key" DataTextField="Value" />
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Title" HeaderText="Title" />
<asp:BoundField DataField="Link" HeaderText="Link" />
</Columns>
</asp:GridView>
이에 연결되는 데이터 소스 : 행의 데이터가 바인딩 될 때 호출되는
<asp:ObjectDataSource ID="objDataSource" runat="server" TypeName="MyCompany.Modules.Discovery.DiscoveryController" SelectMethod="GetDiscoverys" UpdateMethod="UpdateDiscovery" DeleteMethod="DeleteDiscovery">
<SelectParameters>
<asp:QueryStringParameter Name="ModuleId" QueryStringField="mid" />
</SelectParameters>
<UpdateParameters>
<asp:QueryStringParameter Name="ModuleId" QueryStringField="mid" />
</UpdateParameters>
<DeleteParameters>
<asp:QueryStringParameter Name="ModuleId" QueryStringField="mid" />
</DeleteParameters>
</asp:ObjectDataSource>
cmdDiscovery_RowDataBound 방법은 다음 C# 코드입니다 :
protected void cmdDiscovery_RowDataBound(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowIndex >= 0)
{
int intImage = ((DiscoveryInfo)e.Row.DataItem).Image;
if (grdDiscoverys.EditIndex == -1)
{
// View
Label lblViewImage = ((Label)e.Row.FindControl("lblViewImage"));
if (GetFileDictionary().ContainsKey(intImage))
{
lblViewImage.Text = GetFileDictionary()[intImage];
}
else
{
lblViewImage.Text = "Missing Image";
}
} else {
// Edit
DropDownList ddlEditImage = ((DropDownList)e.Row.FindControl("ddlEditImage"));
ddlEditImage.DataSource = GetFileDictionary();
ddlEditImage.DataBind();
if (GetFileDictionary().ContainsKey(intImage))
{
ddlEditImage.SelectedValue = intImage.ToString();
}
}
}
}
catch (Exception exc)
{
//Module failed to load
Exceptions.ProcessModuleLoadException(this, exc);
}
}
어떻게해야합니까 th의 이미지 값 e 드롭 다운 목록이 업데이트 함수에 전달됩니까?