2011-01-31 6 views
0

自動的に生成された編集ボタンを持つGridViewがあります。単純な入力フィールドではなくアイテムのドロップダウンリストにしたいので、Imageカラムのカスタマイズされた動作がほしいと思っていました。また、データベースの値が実際にはなかったドロップダウンリストに存在します。C#DotNetNukeモジュール:GridVIew AutoGenerateEditButtonが更新時にフィールド上をスキップしています

私がこれまで行ってきたコードでは、Imageフィールドから私が望む振る舞いを得ました。私はないので、良いではありません

​​

:問題は、私はその特定のフィールドを更新しようとしたとき、私はエラーがそれが持つフォームを更新する方法を見つけることができないことを私に戻って吐き出す得るということですUpdateDiscoveryメソッドがあります。しかし、TitleとLinkの間に、Imageフィールドに属し、渡されていない別のパラメータがあるはずです。私はそれがTemplateFieldとBoundFieldではないので、おそらく更新ボタンがそのフィールドを渡すことを知らないとわかりました。そして、ドロップダウンリストの選択値としてBind('image')を使用すると、私が行を編集しようとするとデータベースのフィールドが実際に存在する限り、それ以外の場合は爆発し、ドロップダウンリストに存在しない値についてのエラーが表示されます。

私は、次の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> 

をこれはに結ばれたデータソース:行のデータがバインドされたときに呼び出されるcmdDiscovery_RowDataBound方法は、次のC#コードである

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

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ドロップダウンリストが更新関数に渡されますか?

答えて

0

お尻にobjDataSource_Updatingを使用すると、ddlEditImage.SelectedValue

関連する問題